Пошук послідовних пар
Якщо ви готові використовувати сторонні бібліотеки і вам не потрібен паралелізм, тоді jOOλ пропонує віконні функції у стилі SQL наступним чином
System.out.println(
Seq.of(0, 1, 2, 3, 4)
.window()
.filter(w -> w.lead().isPresent())
.map(w -> tuple(w.value(), w.lead().get())) // alternatively, use your new Pair() class
.toList()
);
Врожайність
[(0, 1), (1, 2), (2, 3), (3, 4)]
lead()
Функція отримує доступ наступного значення в порядку обходу з вікна.
Знаходження послідовних трійків / чотирьох / n-кортежів
Питання в коментарях пропонувало більш загальне рішення, де не слід збирати пари, а n-кортежі (або, можливо, списки). Ось таким чином альтернативний підхід:
int n = 3;
System.out.println(
Seq.of(0, 1, 2, 3, 4)
.window(0, n - 1)
.filter(w -> w.count() == n)
.map(w -> w.window().toList())
.toList()
);
Вихід списку
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Без цього filter(w -> w.count() == n)
результат був би
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4], [4]]
Відмова: Я працюю в компанії, що стоїть за jOOλ