我有一个循环可以执行我想要的操作 - 它将类型的对象添加A到列表中results:
ArrayList<A> results = new ArrayList<>();
for (A a: listOfA) {
for (B b : a.getListOfB()) {
if ("myString".equals(b.getMyString())) {
results.add(a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用 Java 8 流重构我的代码,我想出了这个解决方案,因为它收集类型B而不是A-的对象List<A> results = ...显然是错误的:
List<A> results = listOfA.stream()
.flatMap(a -> a.getListOfB().stream())
.filter(b -> "myString".equals(b.getMyString()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
A如何使用 Java 8 流收集类型列表?
我在寻找[java] 嵌套 foreach 流的SO 中找到了许多结果,但我找不到任何适合我需要的东西。
你不需要flatMap这里。只需filter在Stream<A>.
List<A> results =
listOfA.stream()
.filter(a -> a.getListOfB()
.stream()
.anyMatch(b -> "myString".equals(b.getMyString())))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这是假设您不想将A多次添加到 的实例List(如果它有多个B匹配的实例)"myString"。
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |