Java8中的迭代返回列表中的最后一个值
很明显,我不擅长Java8。有人能告诉我为什么我的集合在迭代过程中没有保留所有的值吗?如果设置断点,代码将迭代,但只返回最后一个值Java8中的迭代返回列表中的最后一个值,java,list,lambda,java-8,java-stream,Java,List,Lambda,Java 8,Java Stream,很明显,我不擅长Java8。有人能告诉我为什么我的集合在迭代过程中没有保留所有的值吗?如果设置断点,代码将迭代,但只返回最后一个值 Set<Group> groups = new Hashset<>(); Group group = new Group(); List my = model.getValues(); list.stream().forEach(gr -> { group.setName(gr.getDescription()
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);
Set groups=newhashset();
组=新组();
列出my=model.getValues();
list.stream().forEach(gr->{
setName(gr.getDescription());
group.setDescription(gr.getDescription());
组。添加(组);
});
系统输出打印项次(组);
因为您在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);
});
提供了一个正确的双参数构造函数。
list.stream().map(gr->{Group Group=new Group();Group.setName(gr.getDescription());Group.setDescription(gr.getDescription());return Group;}).collect(toSet())代码>此代码中的问题太多,甚至无法编译。如果您在代码方面有一些具体的问题(即使您不想这样),那么请在您的问题中只包含一些代码,这些代码实际上可以让我们重现该问题,不要添加与您想问的问题无关的问题(如果我们专注于与实际问题无关的问题,这将浪费您的时间和精力)。您的第一个解决方案不适用于集合。您将只获得第一个值。我不得不把它改成列表,然后它就工作了。Thanks@Etch如果第一个解决方案不起作用,那么发布在这里的第二个解决方案也不起作用。它们都打算用不同的语法执行类似的操作。除此之外,应避免使用原始类型列表
,为名称
和描述
属性设置相同的值似乎是代码的另一个问题,而组
的等于
实现在问题中是抽象的。
Set<Group> groups = list.stream()
.map(gr -> new Group(gr.getDescription(), gr.getDescription())))
.collect(Collectors.toSet());