sli*_*der 2 java lambda java-8
有没有办法只使用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);
}
Run Code Online (Sandbox Code Playgroud)
只需一次收集:
List<SomeClass> someList2 =
someList1.stream()
.map(i -> {
SomeClass someObj = new SomeClass();
someObj.setField(i.getField());
return someObj;
}
)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但请注意,如果构造函数SomeClass接受其值getField(),那么它将更加整洁:
List<SomeClass> someList2 =
someList1.stream()
.map(i-> new SomeClass(i.getField())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者通过map()在两个不同的转换中拆分操作,您可以使用方法引用,这提高了可读性:
List<SomeClass> someList2 =
someList1.stream()
.map(OneClass::getField)
.map(SomeClass::new)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |