Java流对象列表
我在使用java流时遇到问题。我有两门课: 披萨班Java流对象列表,java,java-8,java-stream,Java,Java 8,Java Stream,我在使用java流时遇到问题。我有两门课: 披萨班 public class Pizza { private final String name; private final List<Ingredient> ingredients; // ... } 我需要使用流,但我对这方面还很陌生。 首先,我需要制作格式化菜单: 我有一个列表,在使用streams之后,它应该返回如下内容 pizza_name: ingredient1_preetyname, ingr
public class Pizza {
private final String name;
private final List<Ingredient> ingredients;
// ...
}
我需要使用流,但我对这方面还很陌生。
首先,我需要制作格式化菜单:
我有一个列表
,在使用streams之后,它应该返回如下内容
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()));
这将创建所有比萨饼的流。对于一个比萨饼,我们需要将它映射到相应的字符串表示形式,即它的名称,后跟所有漂亮的配料名称,并用逗号连接
最后,当我们有了所有比萨饼的字符串时,我们可以再次加入它,这次用行分隔符分隔
至于你的第二个问题,关于寻找最便宜的比萨饼,我假设比萨饼的价格是所有配料价格的总和。在这种情况下,您可以通过只保留辛辣的比萨(这是通过查看任何配料是否辛辣获得的)并返回比较器比较比萨配料价格总和的最小值来过滤所有比萨
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);
Collectors.joining(…)
支持前缀,因此您可以使用Collectors.joining(“,”,p.getName()+”:“,”)
…非常感谢,这正是我想要的,太好了。
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);