【发布时间】: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。提前感谢您的帮助。
【问题讨论】:
-
@Holger 谢谢。但是,在某些情况下 listA 可能为空。因此,如果我将您的代码重新编写如下,它会起作用吗? List completeList = someList.stream().**filter( c -> !CollectionUtils.isEmpty(c.getListA())**.flatMap(test -> test.getListA().stream()).collect (Collectors.toList());
-
一般情况下,不要使用这些糟糕的
CollectionUtils。如果要测试null,请测试null,如果要测试空Collection,请使用isEmpty()。明确说明你在做什么,而不是调用这些方法来混合这些东西。并且避免做两次事情(即getListA())。映射到getListA的结果,对其进行过滤,进行下一个处理步骤……并且首先更喜欢使用非null集合。
标签: java lambda functional-programming java-8 java-stream