Heim  >  Artikel  >  Java  >  So verwenden Sie die Methode „map()“ in Java8 StreamAPI

So verwenden Sie die Methode „map()“ in Java8 StreamAPI

王林
王林nach vorne
2023-05-13 19:16:041486Durchsuche

Vorwort

Bei der täglichen Entwicklungsarbeit stoßen wir häufig auf das Problem der Verarbeitung von Daten in Listen, z. B. beim Abrufen einer Sammlung von Attributen in einem Objekt aus einer Sammlung von Objekten. Was wir vorher dachten, war, jedes Element zu durchlaufen und es dann herauszunehmen und in eine andere Sammlung einzufügen, was umständlicher ist. Nach Java 8 können Stream-Operationen für Sammlungen ausgeführt werden, was die obige Verarbeitung prägnanter macht.

Übersicht

Stream Es gibt eine Map()-Methode in der Streaming-Verarbeitung. Diese Methode befindet sich in der Klasse java.util.stream.Stream

So verwenden Sie die Methode „map()“ in Java8 StreamAPI

Sie können sehen, dass die Karte () Methode empfängt einen funktionalen Ausdruck Schnittstellenparameter, der Eingabeparameter hat einen T und gibt einen Stream-Stream zurück. Dieser Stream ist R-generisch. Dabei sind vor allem die folgenden Punkte zu beachten:

  • Der Eingabeparameter ist ein Element in einem Stream;

  • Der Ausgabeparameter ist ein Stream und der Stream ist ein neues Element; Diagramm wie folgt: Im Stream gibt es vier kreisförmige Muster. Nach dem Aufruf der Funktion „map()“ werden sie zu vier fünfzackigen Sternmustern. Die kreisförmigen Muster und das fünfzackige Sternmuster stehen hier in einer Eins-zu-eins-Entsprechung Das heißt, wie viele Elemente es im ursprünglichen Stream gibt. Nach der Methode „map()“ gibt es noch viele Elemente. Das einzige, was sich ändert, ist der Elementtyp im Stream. 🔜 Der Eingabeparameter ist Student und der Ausgabeparameter ist ein Stream mit String als generischem Typ. Wenn Sie sich das Ergebnis ansehen, können Sie sehen, dass alle Namen der Schüler ausgedruckt wurden. Was ist, wenn Sie die Namen dieser Studenten in eine Liste aufnehmen möchten?

Fügen Sie die Namen der Schüler in die Liste ein

@Data
public class Student implements Serializable {
    /**
     * 姓名
     */
    private String name;
    /**
     * 班级
     */
    private String schoolClass;
    /**
     *语文成绩
     */
    private Integer chineseScore;
    /**
     * 数学成绩
     */
    private Integer mathScore;
}

Suchen Sie auf ähnliche Weise alle Klassen und ermitteln Sie die Ergebnisse aller Schüler. Sie können sehen, dass die gedruckten Namen oder Klassen der Schüler doppelte Daten enthalten. So lösen Sie das Problem. Wir wissen, dass die Daten am Ende in die Liste eingefügt werden. Um das Duplizierungsproblem zu lösen, können die Daten in das Set eingefügt und die Deduplizierungsfunktion des Sets verwendet werden: So verwenden Sie die Methode „map()“ in Java8 StreamAPI

public class DataFactory {
    public static List<Student> initData(){
        List<Student> list= new ArrayList<>();
        Student s1=new Student();
        s1.setName("汤霖");
        s1.setSchoolClass("小一班");
        s1.setChineseScore(87);
        s1.setMathScore(95);
        list.add(s1);
 
        Student s2=new Student();
        s2.setName("李牧唐");
        s2.setSchoolClass("小二班");
        s2.setChineseScore(98);
        s2.setMathScore(97);
        list.add(s2);
 
        Student s3=new Student();
        s3.setName("顾北辰");
        s3.setSchoolClass("二年级");
        s3.setChineseScore(89);
        s3.setMathScore(94);
        list.add(s3);
 
        Student s4=new Student();
        s4.setName("言言");
        s4.setSchoolClass("小二班");
        s4.setChineseScore(100);
        s4.setMathScore(90);
        list.add(s4);
 
        Student s5=new Student();
        s5.setName("大运");
        s5.setSchoolClass("小三班");
        s5.setChineseScore(96);
        s5.setMathScore(100);
        list.add(s5);
        return list;
    }
}

Das Ergebnis wird nicht mehr gedruckt. Wenn Sie interessiert sind, können Sie es selbst ausprobieren.

Setzen Sie die Chinesisch-Punktzahl des Schülers namens „Tang Lin“ auf 90

Jetzt müssen Sie die Chinesisch-Punktzahl des Schülers namens Tang Lin auf 90 setzen Wie geht das mit der Funktion „Usage Map()“?

public static void main(String[] args) {
    DataFactory.initData().stream()
        .map(student -> student.getName())
        .forEach(System.out::println);
}
Ausgabeergebnis:

So verwenden Sie die Methode map() in Java8 StreamAPI

Aus den obigen Ergebnissen ist ersichtlich, dass Tang Lins chinesische Punktzahl tatsächlich auf 90 geändert wurde, was korrekt ist. Wenn man sich die Originaldaten ansieht, wurde auch festgestellt, dass sie in 90 geändert wurden. Wie oben erwähnt, generiert die Methode map() einen neuen Stream, und die Daten im Originalstream wurden ebenfalls geändert, da Folgendes gilt Die Codezeile befindet sich im Original. Wenn die Daten im Referenztyp basierend auf den Elementen im Stream geändert werden, werden auch die Daten im Originalstream geändert.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Methode „map()“ in Java8 StreamAPI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen