Trouver des paires successives
Si vous êtes prêt à utiliser une bibliothèque tierce et n'avez pas besoin de parallélisme, alors jOOλ propose des fonctions de fenêtre de style SQL comme suit
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()
);
Céder
[(0, 1), (1, 2), (2, 3), (3, 4)]
La lead()
fonction accède à la valeur suivante dans l'ordre de parcours à partir de la fenêtre.
Recherche de triples / quadruples / n-tuples successifs
Une question dans les commentaires demandait une solution plus générale, où non pas des paires mais des n-uplets (ou éventuellement des listes) devraient être collectés. Voici donc une approche alternative:
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()
);
Produire une liste de listes
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Sans le filter(w -> w.count() == n)
, le résultat serait
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4], [4]]
Clause de non-responsabilité: je travaille pour l'entreprise derrière jOOλ