Java 8 Stream:如何将当前元素与下一个元素进行比较?
2022-09-01 10:49:53
如何从使用Java 8 Streams中获取下一个元素?List
如果我正在迭代一个 ,我想将当前元素与列表的下一个元素进行比较。List
使用Java 8 Stream是否可行?
如何从使用Java 8 Streams中获取下一个元素?List
如果我正在迭代一个 ,我想将当前元素与列表的下一个元素进行比较。List
使用Java 8 Stream是否可行?
我的免费 StreamEx 库允许您使用其他 pairMap
中间操作来处理流元素对。喜欢这个:
StreamEx.of(input).pairMap((current, next) -> doSomethingWith(current, next));
其中 是 、 数组 或 。例如,通过这种方式,您可以轻松检查输入是否排序:input
Collection
Stream
boolean isSorted = StreamEx.of(input)
.pairMap((current, next) -> next.compareTo(current))
.allMatch(cmp -> cmp >= 0);
还有用于Pairs
终端操作,它是所有输入元素对的模拟:forEach
StreamEx.of(input).forPairs((current, next) -> doSomethingWith(current, next));
这些功能可与任何流源(随机访问与否)很好地配合使用,并完全支持并行流。
一种方法是生成一个索引,并按索引获取元素。这只有在支持随机访问时才有效(即,如果你是 一个 ,那将是一个坏主意,因为它不需要恒定的时间)。IntStream
List
List
List
LinkedList
list.get(i)
例如:
IntStream.range(0,list.size()-1).forEach(i -> {
doSomething(list.get(i),list.get(i+1));
});
另一种方法是将最后一个元素存储在数组中:
List<Element> list = ...
Element[] arr = new Element[1];
list.stream().forEach(e -> {
if (arr[0] != null)
doSomething(arr[0],e);
arr[0]=e;
});
这仅适用于顺序流。