Java中的双冒号

  • 在Java中lambda用于简化一些匿名内部类的书写,而双冒号则用来简化lambda的书写,如果lambda方法体中仅调用了其他方法,可以用双冒号来简化lambda的书写。
  • 语法规则:类名::方法名表示调用了类中了某个方法。
  • lambda方法体中调用的方法可以是静态方法、实例方法以及构造方法,三者均可以通过双冒号进行简化。
  • lambda中调用的方法参数和返回值必须和重写方法的参数和返回值相同。

    下面来具体看个lambda方法体中调用静态方法的例子。

public class LambdaTest {

    public void get(){}

    public static List<Integer> filter(int[] num){
        List<Integer> ans = new ArrayList<>();
        for(int i = 0;i < num.length;i++){
            if(num[i] > 5){
                ans.add(num[i]);
            }
        }
        return ans;
    }

    public static void main(String[] args){

        // 匿名内部类写法
        Info info = new Info() {
            @Override
            public List<Integer> method(int[] num) {
                return filter(num);
            }
        };

        // lambda写法
        Info info2 = (int[] num)->{
            return filter(num);
        };

        // lambda简化写法
        Info info3 = num->filter(num);

        // 双冒号简化lambda写法:在lambda方法体中又调用了其他方法,就可以使用双冒号将其进行简化
        Info info4 = LambdaTest::filter;

        System.out.println(info.method(new int[]{1, 2, 5, 6, 9}));
        System.out.println(info2.method(new int[]{1, 2, 5, 6, 9}));
        System.out.println(info3.method(new int[]{1, 2, 5, 6, 9}));
        System.out.println(info4.method(new int[]{1, 2, 5, 6, 9}));
    }

}

interface Info{
    List<Integer> method(int[] num);
}

    再看一个lambda方法体中调用构造方法的例子。

public class LambdaTest {

    public static void main(String[] args){

        // 匿名内部类写法
        Info info = new Info() {
            @Override
            public Integer method(String num) {
                return new Integer(num);
            }
        };

        // lambda写法
        Info info2 = (String num)->{
            return new Integer(num);
        };

        // lambda简化写法
        Info info3 = num -> new Integer(num);

        // 双冒号简化lambda写法:在lambda方法体中又调用了其他方法,就可以使用双冒号将其进行简化
        Info info4 = Integer::new;

        System.out.println(info.method("123"));
        System.out.println(info2.method("123"));
        System.out.println(info3.method("123"));
        System.out.println(info4.method("123"));
    }

}

interface Info{
    Integer method(String num);
}

参考:https://www.bilibili.com/video/BV1NK411f7Z5/?spm_id_from=333.337.search-card.all.click&vd_source=3b276afc1d517ec28a00ae341f72050c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值