java只使用流收集结果(不使用外部循环)
有没有办法只使用lambdas执行以下代码
// translate someList1 to someList3
// .. get sublist
List<String> someList2 = someList1.stream()
.map(i -> i.getField())
.collect(Collectors.toList());
// .. create new (target) list
List<SomeClass> someList3 = new ArrayList<>();
for (String item : someList2) {
SomeClass someObj = new SomeClass();
someObj.setField(item);
someList3.add(someObj);
}
# 1 楼答案
无需
map
将其转换为String
然后返回SomeClass
,在一个映射中执行此操作:# 2 楼答案
您可以通过多行lambda和另一个映射操作来实现这一点:
# 3 楼答案
只需一次收集:
但是请注意,如果在
SomeClass
中有一个接受getField()
值的构造函数,它实际上会更整洁:或者,通过将
map()
操作拆分为两个不同的转换,可以使用方法引用,从而提高可读性: