Lambda表达式2(构造方法引用||实例方法引用)

Lambda表达式的高级用法

一、构造方法引用

 

注意:构造器的参数列表,需要与函数式接口中参数列表保持一致!

 使用格式:类名 :: new

public class User {

    private String name;
    private Integer age;

    public User() {
        super();
    }

    public User(String name) {
        super();
        this.name = name;
    }

    public User(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

1、用Lambda表达式实现分别通过User的无参构造器和一个有参构造器获得User对象

    @Test
    public void test5(){
        Supplier<User> supplier =
                () -> {return new User();}; //() -> new User();如果Lambda体中只有一条语句,可以省略return
        User user1 = supplier.get();    
        System.out.println("user1 : " + user1);

        System.out.println("-----------------------------------");

        Function<String, User> function =
                (x) -> {
                    User user = new User(x);
                    return user;
                };
        User user = function.apply("lzj");
        System.out.println("user : " + user);

    }

2、Lambda的构造器引用分别实现通过User的无参构造器和一个有参构造器获得User对象

    @Test
    public void test6(){
        Supplier<User> supplier = User::new;
        /*get方法无参,有返回值,所以调用的User的无参构造器,返回User对象*/
        User user1 = supplier.get();
        System.out.println("user1 : " + user1);

        System.out.println("-----------------------------------");

        Function<String, User> function = User::new;
        /*apply方法有一个参数,有返回值,所以调用User的一个参数的构造器,并返回User对象*/
        User user = function.apply("lzj");
        System.out.println("user : " + user);
    }

两种方式输出结果相同:

user1 : User [name=null, age=null]
-----------------------------------
user : User [name=lzj, age=null]

2、静态方法引用

 使用格式:类名 :: 静态方法名

例如我们要用Comparator接口的compare方法实现比较两个整数值的大小
1、用Lambda表达式表示如下

    @Test
    public void test3(){
        Comparator<Integer> comparator = 
                (x, y) -> {
                    Integer differ = x < y ? -1 : ((x == y) ? 0 : 1);
                    return differ;
                };
        Integer differ1 = comparator.compare(10, 5);
        System.out.println("differ1 : " + differ1);
    }

3、实例方法引用

 使用格式1:类名 :: 实例方法名

示例:用Lambda表达式实现比较两个字符串的大小

    @Test
    public void test4(){
        BiPredicate<String, String> bp =
                (x, y) -> {
                    Boolean flag = x.equals(y);
                    return flag;
                };
        Boolean flag = bp.test("pp", "pp");
        System.out.println("flag : " + flag);
    }

 使用格式2:对象的引用 :: 实例方法名

用Lambda表达式实现打印字符串

    @Test
    public void test1(){
        Consumer<String> consumer = (x) -> System.out.println(x);
        consumer.accept("ppya");
    }

4.Lambda的数组引用

    @Test
    public void test7(){
        Function<Integer, String[]> function =
                (x) -> new String[x]; //省略retuen的写法
        String[] ss = function.apply(5);
        System.out.println("ss.length : " + ss.length);

        Function<Integer, String[]> function1 = String[]::new;
        String[] sss = function1.apply(5);
        System.out.println("sss.length : " + sss.length);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值