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; }
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); }
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); } }
//将学生姓名放到Set中,可以实现去重功能 Set<String> studentNames = DataFactory.initData().stream() .map(student -> student.getName()) .collect(Collectors.toSet());
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); } }
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!