JAVA----Lambda表达式的方法和数组引用

JAVA----Lambda表达式的方法和数组引用,第1张

一:Lambda静态方法引用 条件:如果lambda表达式方法体已经有其他方法实现那么则可以使用方法引用 首先创建一个Person类,表明属性,封装一下,再写一个无参构造方法, 再写一个有参构造方法。
public class Person {
    private String nickname;
    private  int gander;

    public Person() {

    }

    public Person(String nickname, int gander) {
        this.nickname = nickname;
        this.gander = gander;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getGander() {
        return gander;
    }

    public void setGander(int gander) {
        this.gander = gander;
    }
    public static int staticSum(int a,int b){
        return a+b;
    }
    public  int sum(int a, int b){
        return a+b;
    }
    
        @Override
    public String toString() {
        return "Person{" +
                "nickname='" + nickname + '\'' +
                ", gender=" + gender +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        Person person = (Person) o;
        int x = this.gender - person.getGender();
        int y = this.nickname.hashCode() - person.getNickname().hashCode();
        if (x != 0) {
            return x;
        } else if (y != 0) {
            return y;
        } else {
            return 0;
        }
    }
}
写一个测试类LambdaTest进行引用测试: (因为在方法体中已经有方法体啦,所以在测试类中可以直接引用) 方式一:类名::方法名 方式二:Lambda表达式
public class LambdaTest {
    @Test
    public void test01(){
        BiFunctionbiFunction=Person::staticSum;
        Integer sum = biFunction.apply(10, 20);
        System.out.println(sum);
    }
    @Test
    public void test02(){
        BiFunctionbiFunction=(x,y)->x+y;
        Integer sum = biFunction.apply(10, 20);
        System.out.println(sum);
    }
}
二:Lambda实例方法(非静态方法)引用 第一个代码段中我们已经声明啦一个非静态方法 直接测试引用: 方式:实例名::方法名   这时需要先实例化对象
public class LambdaTest {
    @Test
    public void test03(){
        Person person = new Person();
        BiFunctionbiFunction=person::sum;
        Integer sum = biFunction.apply(10, 20);
        System.out.println(sum);
    }
}
三:Lambda表达式的无参构造方法引用 第一个代码段中我们已经声明啦一个无参构造方法方法 这时我们还要重写to.String方法 测试引用: 方式一:类名::new 方式二:Lambda表达式()->new Person()
public class LambdaTest {
public class LambdaTest {
    @Test
    public void test04(){
        Suppliersupplier= Person::new;
        Person person = supplier.get();
        person.setNickname("浩楠");
        person.setGander(1);
        System.out.println(person);
    }

    @Test
    public void test05(){
        Suppliersupplier=()->new Person();
        Person person = supplier.get();
        System.out.println(person);
    }
}
四:Lambda表达式的有参构造方法引用 第一个代码段中我们已经声明啦一个无参构造方法方法 测试引用: 方式一:类名::new 方式二:Lambda表达式(nickname,gander)->new Person(nickname,gander)
public class LambdaTest {
    @Test
    public void test06(){
        BiFunctionbiFunction= (nickname, gander) -> new Person(nickname, gander);
        Person person = biFunction.apply("浩楠", 1);
        System.out.println(person);
    }
    @Test
    public void test07(){
        BiFunctionbiFunction= Person::new;
        Person person = biFunction.apply("浩楠", 1);
        System.out.println(person);
    }
}
五:Lambda表达式特殊实例方法引用 第一个代码段中我们已经实现并重写compareTo方法 条件:第一个参数的方法的参数是第二参数 测试:先不引用,直接比较,再用Lambda表达式引用方法 或类::方法名
public class LambdaTest {
    @Test
    public void test08(){
        Person person01 = new Person("陈浩楠", 1);
        Person person02 = new Person("浩楠", 0);
        if (person01.compareTo(person02) != 0) {
            System.out.println("不是同一个对象");
        } else {
            System.out.println("是同一个对象");
        }
    }
}
  BiFunction biPredicate = (person01, person02) -> person01.compareTo(person02);
        Person person01 = new Person("陈浩楠", 1);
        Person person02 = new Person("浩楠", 0);
        Integer num = biPredicate.apply(person01, person02);
        if (num != 0) {
            System.out.println("不是同一个对象");
        } else {
            System.out.println("是同一个对象");
        }
   public void test11() {
        BiFunction biPredicate = Person::compareTo;
        Person person01 = new Person("陈浩楠", 1);
        Person person02 = new Person("浩楠", 0);
        Integer num = biPredicate.apply(person01, person02);
        if (num != 0) {
            System.out.println("不是同一个对象");
        } else {
            System.out.println("是同一个对象");
        }
六:Lambda表达式数组引用(字符串数组) 方式一:(参数名)->new String[参数名] 方式二:数组::new
    @Test
    public void test12() {
        // String[] names = new String[10];
        Function function = (count) -> new String[count];
        String[] names = function.apply(10);
        System.out.println(names.length);
    }
    @Test
    public void test13() {
        // String[] names = new String[10];
        Function function = String[]::new;
        String[] names = function.apply(10);
        System.out.println(names.length);
    }


}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/759624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存