我在使用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.第二件事是我需要退回最便宜的辣(至少一种成分是辣的)比萨。我知道我必须为辣的配料配上比萨饼,而且我知道我必须对配料价格进行汇总,但老实说,我不知道该怎么做。
如果有人能以任何可能的方式帮助我,我将很感激。
您可以通过以下方式获取所需的字符串:
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] 删除。
我来说两句