【问题标题】:Lambda + stream to fetch List<A> to A Single ListLambda + 流将 List<A> 提取到单个列表
【发布时间】:2017-04-07 09:35:20
【问题描述】:

我有课

class TestA {
            private List<A> listA;

      //Getters and Setters
}

和另一个班级

class A{
       int id;
}

现在如果想将所有 A 收集到如下代码的列表中

List<TestA> someList ; //Containing TestA
List<A> completeList = new LinkedList<A>();
for(TestA test:someList) {
  if(test.getListA() != null) {
    completeList.addAll(listA);
  }
}

如何使用 Lambda + Stream 获得 completeList。提前感谢您的帮助。

【问题讨论】:

标签: java lambda functional-programming java-8 java-stream


【解决方案1】:

它应该看起来像这样......

  someList.stream()
     .map(TestA::getListA)
     .filter(testA -> testA != null && !testA.isEmpty())
     .flatMap(List::stream)
     .collect(Collectors.toList());

【讨论】:

  • 不需要!testA.isEmpty() 的测试。所以.filter(Objects::nonNull) 也可以。
【解决方案2】:

您可以更明确地表述它(即 Eugene 的方法):

someList.stream()
    .flatMap(testA -> Optional.ofNullable(testA.getListA()).getOrElse(new ArrayList<>()).stream())
    .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    相关资源
    最近更新 更多