java 8中的迭代返回列表中的最后一个值

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)

And*_*cus 5

因为您是在 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)

前提是有一个合适的两参数构造函数。