方法引用练习:

技巧:
1.现在有没有一个方法符合我当前的需求
2.如果有这样的方法,这个方法是否满足引用的规则


练习一:
image.png

思路:
//集合中的数据还是String类型,要放入Student类型数组中还需要先转型成Student类型

public class MyTest01 {
    public static void main(String[] args) {

ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三,23", "李四,24", "王五,25");

Student[] arr = list.stream()
        .map(Student::new)
        .toArray(Student[]::new);
//打印
System.out.println(Arrays.toString(arr));
//[Student{name = 张三, age = 23}, Student{name = 李四, age = 24}, Student{name = 王五, age = 25}]


    }
}

 

Student类

class Student {
  private String name;
  private int age;

    public Student() {
    }

    //引用了构造方法,手动满足引用要求
    public Student(String str){
        this.name=str.split(",")[0];
        this.age=Integer.parseInt(str.split(",")[1]);
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

//...set get toString

}

练习二:
image.png
//只获取姓名可以用map进行类型转换(Student->String)

public class MyTest02 {
    public static void main(String[] args) {

ArrayList<Student>list=new ArrayList<>();
Collections.addAll
(list,new Student("张三",23),
new Student("李四",24),
new Student("王五",25));

        
/*list.stream().map(new Function() {
@Override
public String apply(Student student) {
    return student.getName;
}
}).toArray(String[]::new);*/

                                //使用类名引用方法
String[] arr = list.stream().map(Student::getName).toArray(String[]::new);
System.out.println(Arrays.toString(arr));//[张三, 李四, 王五]

    }
}

//使用类名引用方法
方法引用练习:_第1张图片
Student类:

class Student {
  private String name;
  private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

//...set get toString

}

练习三:
image.png
思考:
当前有没有一个方法符合我当前的需求,没有就自己写一个

public class Testified {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Collections.addAll
        (list,new Student("张三",23),
         new Student("李四",24),
         new Student("王五",25));
    /* //普通写法
    list.stream().map(new Function() {
        @Override
        public String apply(Student student) {
            return student.getName()+"-"+student.getAge();
        }
    }).toArray(String[]::new);

    //lambda表达式
    String[] arr = list.stream()
            .map(student -> student.getName() + "-" + student.getAge())
            .toArray(String[]::new);
    */

//方法引用
Student s=new Student();
String[] arr = list.stream().map(Student::print).toArray(String[]::new);
System.out.println(Arrays.toString(arr));
    }
}

Student类:

public class Student {
  private String name;
  private int age;


    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }


//...set get toString


    public String print(){
        return this.name+"-"+this.age;
    }
}



你可能感兴趣的:(java,开发语言)