"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment inverser efficacement un flux Java 8?

Comment inverser efficacement un flux Java 8?

Publié le 2025-02-06
Parcourir:858

How to Reverse a Java 8 Stream Efficiently?

Inversion des flux Java 8

Dans Java 8, les flux fournissent un moyen puissant et concis de manipuler et de traiter les données. Une opération commune consiste à inverser un flux. Cet article explore deux méthodes pour y parvenir: une solution spécifique pour inverser un intstream et une approche générique pour inverser tout flux d'objets. Intstream, une méthode personnalisée peut être créée pour cartographier la plage de valeurs dans l'ordre inverse. Par exemple, si nous avons un Intstream allant de -5 à 0, l'inversion entraînerait le flux 0 à -5. Cela peut être réalisé en utilisant le code suivant:

static IntStream RevRange (int from, int to) { return IntStream.Range (de, à) .map (i -> à - i de - 1); } Cette méthode évite la boxe et le tri, résultant en une solution plus efficace.

Réversement de flux générique
static IntStream revRange(int from, int to) {
    return IntStream.range(from, to)
                    .map(i -> to - i   from - 1);
}

pour réinverser les flux de tout type d'objet, Deux approches peuvent être utilisées. Le premier consiste à stocker les éléments de flux dans un tableau et à les lire dans l'ordre inverse:

@ suppresswarnings ("non coché") STATIC Stream Reverse (Stream Entrée) { Objet [] temp = input.toArray (); return (stream ) IntStream.Range (0, temp.Length) .Maptoobj (i -> temp [temp.length - i - 1]); } Cette approche est simple mais nécessite la création d'un tableau intermédiaire.

Une autre technique consiste à utiliser des collectionneurs pour accumuler les éléments dans une liste inversée:

@SuppressWarnings("unchecked")
static  Stream reverse(Stream input) {
    Object[] temp = input.toArray();
    return (Stream) IntStream.range(0, temp.length)
                                .mapToObj(i -> temp[temp.length - i - 1]);
}

Cette option nécessite également de stocker les éléments de flux, mais il élimine le besoin de copie en utilisant une liste Array avec une insertion à l'avant.

Il convient de noter qu'il n'y a pas de moyen "approprié" d'inverser un flux sans stocker les éléments. Cependant, les méthodes présentées fournissent des solutions efficaces et polyvalentes pour une inversion inttrestream spécifique et une inversion de flux générique.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3