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;
Stream Terdapat kaedah map() dalam pemprosesan penstriman Mari kita lihat definisinya dahulu
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:@Data public class Student implements Serializable { /** * 姓名 */ private String name; /** * 班级 */ private String schoolClass; /** *语文成绩 */ private Integer chineseScore; /** * 数学成绩 */ private Integer mathScore; }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; } }
Ketahui semua nama pelajar
public static void main(String[] args) { DataFactory.initData().stream() .map(student -> student.getName()) .forEach(System.out::println); }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 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); } }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());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); } }Hasil keluaran: 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!