Rumah > Java > javaTutorial > teks badan

Cara menggunakan kaedah map() dalam Java8 StreamAPI

王林
Lepaskan: 2023-05-13 19:16:04
ke hadapan
1492 orang telah melayarinya

Kata Pengantar

Dalam kerja pembangunan harian, kita sering menghadapi masalah memproses data dalam Senarai, seperti mendapatkan koleksi atribut dalam objek daripada koleksi objek. Apa yang kami fikirkan sebelum ini ialah merentasi setiap elemen dan kemudian mengeluarkannya dan memasukkannya ke dalam koleksi lain, yang lebih menyusahkan selepas Java 8, operasi Stream boleh dilakukan pada koleksi, menjadikan pemprosesan di atas lebih ringkas;

Ikhtisar

Stream Terdapat kaedah map() dalam pemprosesan penstriman Mari kita lihat definisinya dahulu

Cara menggunakan kaedah map() dalam Java8 StreamAPI

Anda boleh melihat bahawa kaedah map() menerima parameter antara muka berfungsi, parameter input ialah T dan mengembalikan strim Strim, iaitu R generik. Terdapat terutamanya perkara berikut yang perlu diberi perhatian:

  • Parameter input ialah elemen dalam strim

  • Parameter output ialah strim, dan strim ialah Elemen baharu;

diwakili oleh gambar rajah seperti berikut. Terdapat empat corak bulatan dalam aliran asal. corak bintang berujung Di sini Corak bulat dan corak bintang berbucu lima mempunyai korespondensi satu dengan satu, iaitu, berapa banyak elemen yang terdapat dalam aliran asal, berapa banyak elemen yang masih ada selepas memanggil kaedah map() , satu-satunya perkara yang berubah ialah jenis elemen dalam strim.

Cara menggunakan kaedah map() dalam Java8 StreamAPI

Contoh

Kami mula-mula mencipta kelas entiti Student.java

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

dan kemudian mencipta kelas untuk memulakan data:

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;
    }
}
Salin selepas log masuk

Ketahui semua nama pelajar

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

Kaedah map() digunakan di sini, parameter input ialah Pelajar, parameter output ialah aliran dengan String sebagai jenis generik , dan akhirnya forEach digunakan Selepas mencetak, lihat hasil

Cara menggunakan kaedah map() dalam Java8 StreamAPI

dan anda boleh melihat bahawa semua nama pelajar telah dicetak. Bagaimana jika anda ingin memasukkan nama pelajar ini ke dalam Senarai?

Masukkan nama pelajar ke dalam senarai

public static void main(String[] args) {
    //将所有的学生姓名放到list中
    List<String> studentNames = DataFactory.initData().stream()
        .map(student -> student.getName())
        .collect(Collectors.toList());
    for (String studentName : studentNames) {
        System.out.println(studentName);
    }
}
Salin selepas log masuk

Begitu juga cari semua kelas dan ketahui markah semua pelajar Anda boleh membandingkannya dengan yang di atas dan anda boleh lihat cetakan Terdapat data pendua dalam nama atau kelas pelajar Bagaimana untuk menyelesaikan masalah ini? Kami tahu bahawa data dimasukkan ke dalam Senarai pada penghujung Untuk menyelesaikan masalah pendua, data boleh dimasukkan ke dalam Set dan menggunakan fungsi deduplikasi Set:

//将学生姓名放到Set中,可以实现去重功能
Set<String> studentNames = DataFactory.initData().stream()
    .map(student -> student.getName())
    .collect(Collectors.toSet());
Salin selepas log masuk

Hasilnya tidak akan. lagi dicetak Jika anda berminat, anda boleh mencubanya sendiri.

Tetapkan skor bahasa Cina pelajar bernama "Tang Lin" kepada 90

Kini terdapat keperluan untuk menetapkan skor bahasa Cina pelajar bernama Tang Lin kepada

, mari lihat cara menggunakan fungsi map()? 90

public static void main(String[] args) {
    List<Student> students = DataFactory.initData();

    List<Student> studentNames = students.stream().map(student -> {
        if ("汤霖".equals(student.getName())) {
            student.setChineseScore(90);
        }
        return student;
    }).collect(Collectors.toList());

    for (Student studentName : studentNames) {
        System.out.println(studentName);
    }
    //打印老的list
    System.out.println("-----改之前的数据-----");
    for (Student studentName : students) {
        System.out.println(studentName);
    }
}
Salin selepas log masuk

Hasil keluaran:

Cara menggunakan kaedah map() dalam Java8 StreamAPI

Seperti yang dapat dilihat daripada keputusan di atas, markah bahasa Cina Tang Lin sememangnya telah ditukar kepada

betul. Melihat kepada data asal, ia juga telah ditukar kepada 90 Seperti yang dinyatakan di atas, kaedah map() menjana aliran baharu, dan data dalam aliran asal juga telah diubah suai, kerana baris kod berikut ialah. asas elemen dalam aliran asal Jika data dalam jenis rujukan diubah suai, data dalam aliran asal juga akan diubah suai. 90

Atas ialah kandungan terperinci Cara menggunakan kaedah map() dalam Java8 StreamAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan