Unfortunately, the Stream API is not very well suited to tackle problems that involve dependant operations on the Stream element, like this one.
However, you can use the StreamEx library for this:
public static void main(String[] args) {
IntStream seq = IntStream.of(1, 2, 3, -1, -1, 1, 2, 1, 2);
IntUnaryOperator next = i -> i + 1;
List<List<Integer>> result =
IntStreamEx.of(seq).boxed().groupRuns((i1, i2) -> next.applyAsInt(i1) == i2).toList();
System.out.println(result); // prints "[[1, 2, 3], [-1], [-1], [1, 2], [1, 2]]"
}
This groups into a List
all consecutive integers where the second one is equal to the next
function applied to the first one. Finally, this Stream is collected into a List
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…