每个调用方法和addAll的Java 8 lambda

时间:2018-04-30 16:42:12

标签: java lambda collections java-stream

如果可能,我想替换以下代码以使用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>

有人可以通过lambdas建议最好的方法吗?非常感谢。

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

使用flatMap将多个列表组合成一个列表。

myObjects.stream()
    .flatMap(ob -> daoClass.findItemsById(ob.getId()).stream())
    .collect(Collectors.toList());

答案 2 :(得分:1)

flatMap it!

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