Maison > Java > javaDidacticiel > Comment inverser les flux dans Java 8 : un guide complet

Comment inverser les flux dans Java 8 : un guide complet

Patricia Arquette
Libérer: 2024-10-31 17:57:01
original
296 Les gens l'ont consulté

How to Reverse Streams in Java 8: A Comprehensive Guide

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal