Comment inverser les flux Java : un guide complet
Introduction
Inverser les flux en Java 8 peut être une exigence courante dans divers scénarios. Cet article approfondit les techniques efficaces pour réaliser des inversions de flux, en abordant à la fois des cas spécifiques et généraux.
Cas spécifique : Inverser un IntStream
Pour inverser un IntStream, une approche personnalisée est nécessaire. La méthode revRange suivante génère un IntStream inversé dans une plage donnée :
<code class="java">static IntStream revRange(int from, int to) { return IntStream.range(from, to) .map(i -> to - i + from - 1); }</code>
Cas général : inversion des flux de tout type
Pour les flux généraux de tout type, il y a existe plusieurs approches :
1. Stocker les éléments et inverser :
Stocker les éléments du flux dans un tableau, puis les lire dans l'ordre inverse :
<code class="java">static <T> Stream<T> reverse(Stream<T> input) { Object[] temp = input.toArray(); return (Stream<T>) IntStream.range(0, temp.length) .mapToObj(i -> temp[temp.length - i - 1]); }</code>
2. Collecter dans une liste inversée :
Accumuler des éléments dans une liste inversée à l'aide de collecteurs :
<code class="java">Stream<T> input = ... ; List<T> output = input.collect(ArrayList::new, (list, e) -> list.add(0, e), (list1, list2) -> list1.addAll(0, list2));</code>
3. Inversion de liste efficace (mise à jour du 29/01/2016) :
Utilisez un ArrayDeque, qui prend en charge efficacement l'insertion à l'avant, pour éviter toute inefficacité :
<code class="java">Deque<String> output = input.collect(Collector.of( ArrayDeque::new, (deq, t) -> deq.addFirst(t), (d1, d2) -> { d2.addAll(d1); return d2; }));</code>
Résumé
Ces techniques fournissent des moyens efficaces d'inverser les flux Java 8. Pour les IntStreams spécifiques, revRange est une solution dédiée. Pour les flux généraux, le stockage d’éléments ou la collecte dans des listes offrent des options pratiques. Pour une efficacité optimale lors de la collecte dans des listes, ArrayDeque doit être utilisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!