Etc*_*tch -3 java lambda list java-8 java-stream
显然我不擅长 Java 8。有人能告诉我为什么我的集合在迭代过程中没有保留我的所有值吗?如果我放置一个断点,代码会迭代但只返回最后一个值。
Set<Group> groups = new Hashset<>();
Group group = new Group();
List my = model.getValues();
list.stream().forEach(gr -> {
group.setName(gr.getDescription());
group.setDescription(gr.getDescription());
groups.add(group);
});
System.Out.Println(groups);
Run Code Online (Sandbox Code Playgroud)
因为您是在 lambda 表达式之外创建它。您需要在每次迭代中创建一个新实例,这应该有效:
Set<Group> groups = new Hashset<>();
List my = model.getValues();
list.stream().forEach(gr -> {
Group group = new Group();
group.setName(gr.getDescription());
group.setDescription(gr.getDescription());
groups.add(group);
});
Run Code Online (Sandbox Code Playgroud)
甚至更清洁使用map
:
Set<Group> groups = list.stream()
.map(gr -> new Group(gr.getDescription(), gr.getDescription())))
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
前提是有一个合适的两参数构造函数。