java - 将嵌套的 foreach 循环转换为流
问题描述
我正在尝试将两个foreach
循环和一个if
语句转换为一个流。
这是我要转换的内容:
for (ViewFlightRouteAirportType associatedAirportType : etopsAndNonEtopsAssociatedAirportTypes) {
for (ViewFlightAirportDTO airport : flightRoute.getAirportsForType(associatedAirportType)) {
if ( airportIataCode.equals(airport.getIataCode()) ) {
addValueIfNotPresent(associatedFlights, associatedAirportType, flightData);
}
}
}
etopsAndNonEtopsAssociatedAirportTypes
是一个数组。
airportIataCode
是字符串
这是我写的:
Arrays.stream(etopsAndNonEtopsAssociatedAirportTypes)
.forEach(associatedAirportType -> flightRoute.getAirportsForType(associatedAirportType)
.forEach(airport -> flightRoute.getAirportsForType(associatedAirportType)
.stream()
.filter(p -> p.equals(airport.getIataCode())).forEach(addValueIfNotPresent(associatedFlights,associatedAirportType,flightData);
它不需要也不起作用,但对我来说它看起来很丑。它应该是什么样子?
解决方案
这是一个例子。由于我没有您的课程,因此我尝试以这种方式模拟它。想象一下ll
你的外部 for 循环数据结构,对于其中的每个元素,你创建另一个集合并循环它。因此,基本上,我们将内部 for 循环中的这些对象列表作为一个整体,以便我们可以过滤它们。这就是您可以使用flatMap
它来展平集合集合的地方。然后我们只是过滤并收集这些值。
List<String> ll = new ArrayList<>();
ll.stream()
.map(el-> Arrays.asList(el))
.flatMap(List::stream)
.filter(el->el.equals(str))
.collect(Collectors.toList());
再次,我想提一下,这不是你的确切情况,但我认为情况类似。
推荐阅读
- typescript - 具有未知值的 TypeScript 索引签名
- ios - 故事板上按钮的坐标与模拟器上按钮的位置不同
- python-3.x - 如何从指向网站的代码中插入逗号(python)
- amazon-web-services - Aws TTS Polly -> 如何检查当前使用情况(已使用的字符数)?
- .net-core - 最新版 System.Data.Sqlite 不支持密码加密吗?
- c# - 无法识别时如何在.Net中序列化枚举
- r - 如何在条件中引用向量的元素?
- reactjs - 表情符号在 contentEditable 中重新渲染后变成问号
- r - 使用 fviz_clusters() 可视化 K-means 集群时遇到问题
- r - 有没有一种方便的方法可以在 Raku 中复制 R 的“命名向量”概念,可能使用 Mixins?