gpt4 book ai didi

java - 在 Java 8 中使用流、lambda

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:07 25 4
gpt4 key购买 nike

我想优化以下代码以获取现有的 ArrayList 并根据以下逻辑创建一个新列表。 Java 8 中的流式处理/lambda 是否使其成为可能?

for (ShipmentTracingDTO tracing : tracings) {
if (tracing.getDestination()) {
newTracings.add(tracing);
break;
}
newTracings.add(tracing);
}

最佳答案

您可以使用 IntStream.range 来完成和 List.subList可能是:

List<ShipmentTracingDTO> newTracings = tracings.subList(0, IntStream.range(0, tracings.size())
.filter(i -> tracings.get(i).getDestination())
.map(a -> a + 1) // to include the index of occurrence
.findFirst()
.orElse(tracings.size())); // else include all until last element

注意:这只是tracings的 View 并因此更改基础列表 tracings也会反射(reflect)在 newTracings 的变化中.如果你想解耦这些,你可以创建一个 new ArrayList<>()从解决方案。

编辑:在 Holger 的评论中,您可以选择使用:

List<ShipmentTracingDTO> newTracings = IntStream.rangeClosed(1, tracings.size())
.filter(i -> tracings.get(i - 1).getDestination()) // i-1 to include this as well
.mapToObj(i -> tracings.subList(0, i)) // Stream<List<ShipmentTracingDTO>>
.findFirst() // Optional<List<ShipmentTracingDTO>>
.orElse(tracings); // or else the entire list

关于java - 在 Java 8 中使用流、lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com