Java流对象列表

莫里奥

我在使用Java流时遇到麻烦。我有两个课:披萨课

public class Pizza {
    private final String name;
    private final List<Ingredient> ingredients;
    // ...
}

和成分类与那些:

private final String preetyName;
private final int price;
private final boolean meat;
private final boolean spicy;

我需要使用流,但是我对此很陌生。首先,我需要制作格式化的菜单:我有一个菜单List<Pizza>,使用流之后,它应该返回类似以下的内容

pizza_name: ingredient1_preetyname, ingredient2_preetyname...\npizza2_name...

作为一个字符串。我有这样的东西,但它只是一串所有的成分。我不知道如何在配料后添加披萨名称和\ n

String lista=pizzas.stream()
                    .flatMap(p -> p.getIngredients().stream())
                    .map(i ->i.getPreetyName())
                    .collect(Collectors.joining(", "));

2.第二件事是我需要退回最便宜的辣(至少一种成分是辣的)比萨。我知道我必须为辣的配料配上比萨饼,而且我知道我必须对配料价格进行汇总,但老实说,我不知道该怎么做。

如果有人能以任何可能的方式帮助我,我将很感激。

Tunaki

您可以通过以下方式获取所需的字符串:

String str =
    pizzas.stream()
          .map(p -> p.getName() + ": " + 
                     p.getIngredients().stream()
                                       .map(Ingredient::getPreetyName)
                                       .collect(Collectors.joining(", "))
          )
          .collect(Collectors.joining(System.lineSeparator()));

这将创建Stream<Pizza>所有比萨饼。对于一个披萨,我们需要将其映射到相应的String表示形式,即其名称,然后是配料的所有漂亮名称以及逗号。

最后,当所有披萨都具有所有这些字符串时,我们可以再次加入它,这次用行分隔符分隔。


关于您要检索最便宜的比萨的第二个问题,我将假定比萨的价格是其所有成分价格的总和。在这种情况下,您可以通过仅保留辛辣的比萨饼(通过查看是否有辛辣的配料来获得)来过滤所有比萨饼,并返回比较器的最小值,以比较比萨饼的配料价格总和。

Pizza cheapestSpicy =
    pizzas.stream()
          .filter(p -> p.getIngredients().stream().anyMatch(Ingredient::isSpicy))
          .min(Comparator.comparingInt(
             p -> p.getIngredients().stream().mapToInt(Ingredient::getPrice).sum()
          )).orElse(null);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章