我们可以使用 java 8 中的流来合并这三个嵌套的 for 循环吗?
Can we Merge these three nested for loops by using streams in java 8?
在尝试使用 Streams 转换以下代码时,我遇到了一些错误。我无法使用流来转换它。我无法使用 Streams
合并 for 循环
下面的代码是必须使用流更改的代码。
for (Admin ah : subProducers) {
List<String> wns = ah.getAdminSitCodes().stream()
.map(new SitCodeMap()).map(Pair::getFirst)
.distinct().collect(Collectors.toList());
for (String wn : wns) {
for (String value : values) {
if (wn.equals(value)) {
admin.add(ah);
}
}
}
}
我试过如下
admin = subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()
.map(new SitCodeMap())
.map(Pair::getFirst).distinct()).collect(Collectors.toList())
.stream()
.filter(wns->values.stream().anyMatch(v-
>wns.equals(v)))
.collect(Collectors.toList());
必须使用流将其转换为列表
您可以为 values
使用 Set
集合,然后将代码完成为:
List<Admin> admin = subProducers.stream()
.filter(a -> a.getAdminSitCodes().stream()
.map(new SitCodeMap())
.map(Pair::getFirst) // assuming this is Stream<String>
.distinct()
.anyMatch(values::contains))
.collect(Collectors.toList());
您可能正在寻找流的 flatMap():
在 flatMap 之后,您会得到一个 "flattened" 流,其中包含在 flatmap 中创建的子流的所有元素。
所以
subProducers.stream().flatMap(sp-> sp.getAdminSitCodes().stream())
生成所有 adminSitCodes 的流,而
subProducers.stream().map(sp-> sp.getAdminSitCodes().stream())
产生一连串的流。
在尝试使用 Streams 转换以下代码时,我遇到了一些错误。我无法使用流来转换它。我无法使用 Streams
合并 for 循环下面的代码是必须使用流更改的代码。
for (Admin ah : subProducers) {
List<String> wns = ah.getAdminSitCodes().stream()
.map(new SitCodeMap()).map(Pair::getFirst)
.distinct().collect(Collectors.toList());
for (String wn : wns) {
for (String value : values) {
if (wn.equals(value)) {
admin.add(ah);
}
}
}
}
我试过如下
admin = subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()
.map(new SitCodeMap())
.map(Pair::getFirst).distinct()).collect(Collectors.toList())
.stream()
.filter(wns->values.stream().anyMatch(v-
>wns.equals(v)))
.collect(Collectors.toList());
必须使用流将其转换为列表
您可以为 values
使用 Set
集合,然后将代码完成为:
List<Admin> admin = subProducers.stream()
.filter(a -> a.getAdminSitCodes().stream()
.map(new SitCodeMap())
.map(Pair::getFirst) // assuming this is Stream<String>
.distinct()
.anyMatch(values::contains))
.collect(Collectors.toList());
您可能正在寻找流的 flatMap():
在 flatMap 之后,您会得到一个 "flattened" 流,其中包含在 flatmap 中创建的子流的所有元素。
所以
subProducers.stream().flatMap(sp-> sp.getAdminSitCodes().stream())
生成所有 adminSitCodes 的流,而
subProducers.stream().map(sp-> sp.getAdminSitCodes().stream())
产生一连串的流。