pad*_*ino 1 java java-8 java-stream
我有一个返回对象列表的函数.获取该列表后,我想将每个对象中的字段设置为相同的值.有没有办法可以将下面的三个(模拟)代码行减少到一个?
List<someObjects> aList = functionReturningList();
aList.stream().forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么你想在一行中做到这一点,但这是一种方式:
anotherList.addAll(functionReturningList()
.stream()
.map(m -> { m.setField(fieldValue); return m;})
.collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
一旦编写完成,它肯定比"单行"更多.除了map执行副作用操作,收集器也复制整个集合.因此,您最初的方法更好.
并且List也有forEach,你没有必要流来获得该方法.
唯一的,我会在你的代码中改变,就是stream()在你想做的时省略调用forEach:
List<someObjects> aList = functionReturningList();
aList.forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud)
如果你真的坚持在一次操作中这样做,你可以使用
functionReturningList().forEach(m -> {
m.setField(fieldValue));
anotherList.add(m);
});
Run Code Online (Sandbox Code Playgroud)
但是,这样做是没有优势的.如果存在任何可识别的性能差异,前者可能比后者更有效,因为它允许JVM将addAll操作优化为单个内存传输.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |