【发布时间】:2018-08-20 05:11:15
【问题描述】:
我需要一些替代方法以使以下代码更具可读性。 ssrFlightList 是嵌套列表。
我试过forEach:
ssrFlightList.stream().forEach(
x -> x.getSsrPassengerList().stream().forEach(
y -> y.getSsrItemList().stream().forEach(
z -> z.getSsrCodeList().stream().forEach(t -> {
if ("BSML".equalsIgnoreCase(t.getCode())) {
ssrCodeListStr.set(t.getText());
}
})
)));
这也是flatMap 的例子:
Optional<SSRItemCode> itemCode = ssrFlightList
.stream()
.flatMap(firstNode -> firstNode.getSsrPassengerList().stream())
.flatMap(s -> s.getSsrItemList().stream())
.flatMap(s -> s.getSsrCodeList().stream())
.filter(s1 -> s1.getCode().equals("BSML"))
.findFirst();
itemCode.isPresent() ? ssrCodeListStr.set(itemCode.get().getText());
我正在寻找另一种获取ssrCodeListStr 文本的方法。
【问题讨论】:
-
“我正在寻找另一种方法” 为什么?这两种方式有什么不足?
-
请注意,您的第二个示例与第一个示例不同,因为第一个示例获取 last 匹配值,而第二个获取第一个匹配值。
-
我不确定你能做得更好。您可以通过编写一个将方法引用转换为流的辅助方法来稍微缩短第二个。
-
尼特:
....findFirst().map(t -> ssrCodeListStr.set(t.getText())). -
@AndyTurner
....findFirst().ifPresent(t -> ssrCodeListStr.set(t.getText()))
标签: java lambda java-8 java-stream flatmap