Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist

Jeder liebt Stream API, Schleifen wie das Schreiben in eine erweiterte for-Anweisung sind sauber. Ich weiß nicht, was ich mit einer Schleife machen soll, die auf den Index innerhalb der Schleife verweisen möchte. (Es gibt eine Möglichkeit, eine eigene Klasse zu erstellen, auch wenn Sie herumgehen: durchhalten :)

Also drehte ich meinen Kopf ein wenig.


Die folgenden Fälle werden als "Schleifen angenommen, die auf den Index innerhalb der Schleife verweisen möchten".

――Ich möchte zwei oder mehr Listen zusammen drehen

(Weil Sie sich auf "i" beziehen und Ihren Lieblingsprozess schreiben können Es kann auch in Fällen wie "Ich möchte die Verarbeitung am Anfang / Ende der Liste ändern" verwendet werden. Ich finde es nicht sehr schön. )

Unten finden Sie ein Codebeispiel.

    public static void main(String[] args) {
        //Geeignete Liste aus Zufallszahlen
        List<Integer> listA = new ArrayList<>(Arrays.asList(12, 23, 66, 45, 10, 48, 21, 25, 68, 65));
        List<Integer> listB = new ArrayList<>(Arrays.asList(98, 96, 4, 33, 30, 38, 39, 25, 32, 64));

        //Fall 1: Wenn Sie zwei Listen zusammen bearbeiten möchten
        List<Boolean> isWinnerA = IntStream.range(0, Math.min(listA.size(), listB.size()))
                .mapToObj(i -> listA.get(i) > listB.get(i))
                .collect(Collectors.toList());
        System.out.println("isWinnerAList: " + isWinnerAList);
        // -> isWinnerA: [false, false, true, true, false, true, false, false, true, true]

        //Fall 2: Wenn Sie die Vorder- und Rückseite der Liste gemeinsam behandeln möchten
        List<Double> movingAverage = IntStream.range(0, listA.size() - 1)
                .mapToObj(i -> (listA.get(i) + listA.get(i + 1)) / 2d)
                .collect(Collectors.toList());
        System.out.println("movingAverage: " + movingAverage);
        // -> movingAverage: [17.5, 44.5, 55.5, 27.5, 29.0, 34.5, 23.0, 46.5, 66.5]
    }

Als Komposition

--for (int i; i <list.size (); i ++) part --Erstellen Sie mit der Factory-Methode von "IntStream"


Pro: Sie können nur mit den Standard schreiben con: Stream Sie können verwirrt sein, wenn Sie nicht daran gewöhnt sind

Wird gesagt, dass es besser ist, normalerweise einen for-Satz zu schreiben? Nun, wenn es das im Beispiel verwendete ist, kann es für Dokumente normal sein, aber kann es in Fällen wie "filter ()", Aggregationsverarbeitung und Stream-Funktionen verwendet werden? Ich denke.

Recommended Posts

Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich möchte eine E-Mail in Java senden.
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte schnell von Java nach SQLite schreiben
Ich habe versucht, den Block mit Java zu brechen (1)
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich habe versucht, mit der Java Stream-API eine Methode zu erstellen, die mehrere Filter gleichzeitig anwendet. Ist das in Ordnung?
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich möchte ein Objekt im CSV-Format mit mehrzeiligem Header und Filter in Java zurückgeben
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (graue Magie, die weniger schwarze Magie ist)
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Royal Road Edition, die weder Magie noch irgendetwas ist)
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte Java Applet ohne Verwendung einer IDE erstellen
Ich möchte eine mit Rails 6 erstellte App an GitHub senden
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Ich möchte manuell eine Autorisierungs-E-Mail mit Devise senden
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
[Java] Einführung in die Stream-API
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Konvertieren Sie ein zweidimensionales Array mit der Java 8 Stream-API in das CSV-Format
Konvertieren Sie ein potenziell null-Array in einen Stream
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte nur Java mit Eclipse auf meinem Mac schreiben
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
So implementieren Sie einen Job, der die Java-API in JobScheduler verwendet
So stellen Sie eine App bereit, die ein lokales Glas auf Heroku verweist
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Möchten Sie eine IOException aus dem Stream werfen? In diesem Fall
[java8] Um die Stream-API zu verstehen
[Einführung in Java] Informationen zur Stream-API
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Java8 Stream API zu verwenden