Encontrando pares sucessivos
Se você está disposto a usar uma biblioteca de terceiros e não precisa de paralelismo, então jOOλ oferece funções de janela no estilo SQL como segue
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()
);
Produzindo
[(0, 1), (1, 2), (2, 3), (3, 4)]
A lead()
função acessa o próximo valor na ordem de passagem da janela.
Encontrar sucessivos triplos / quádruplos / n-tuplas
Uma pergunta nos comentários estava pedindo uma solução mais geral, onde não pares, mas n-tuplas (ou possivelmente listas) deveriam ser coletados. Aqui está, portanto, uma abordagem alternativa:
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()
);
Produzindo uma lista de listas
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Sem o filter(w -> w.count() == n)
, o resultado seria
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4], [4]]
Isenção de responsabilidade: eu trabalho para a empresa por trás do jOOλ