Java 8 lambda用于each调用方法和addAll

6
如果可能的话,我想使用Java 8流来替换以下代码:
final List<Long> myIds = new ArrayList<>();
List<Obj> myObjects = new ArrayList<>();
// myObject populated...

for (final Obj ob : myObjects) {
   myIds.addAll(daoClass.findItemsById(ob.getId()));
}

daoClass.findItemsById 返回 List<Long>

有人能建议通过Lambda表达式实现最佳方法吗?非常感谢。

3个回答

11
List<Long> myIds = myObjects.stream()
    .map(Obj::getId)
    .map(daoClass::findItemsById)
    .flatMap(Collection::stream)
    .collect(Collectors.toList());

2
使用flatMap将多个列表合并成一个列表。
myObjects.stream()
    .flatMap(ob -> daoClass.findItemsById(ob.getId()).stream())
    .collect(Collectors.toList());

1

flatMap it!

source.stream()
      .flatMap(e -> daoClass.findItemsById(e.getId).stream())     
      .collect(Collectors.toCollection(ArrayList::new));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接