java --- lambda表达式

目录

1、先爽用一下lambda

2、lambda语法和函数式接口

3、用lambda表达式调用参数为接口的方法

4.Lambda表达式的语法进阶


1、先爽用一下lambda

lambda表达式很大一个作业就是简化匿名内部类

public class case1 {
    public static void main(String[] args) {
        Integer[] arr = {2,5,1,0,9,7,4};
        Integer[] arr2 = {2,5,1,0,9,7,4};
        //使用匿名内部类作为比较器
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        //可以简化为lambda表达式
        Arrays.sort(arr2,(Integer o1,Integer o2)->{
            return o1-o2;
        });

        String s1 = Arrays.toString(arr);
        String s2 = Arrays.toString(arr2);
        System.out.println(s1);
        System.out.println(s2);
    }
}

我们也可以看到,运行之后的结果是一样的

2、lambda语法和函数式接口

lambda表达式的格语法

注意点:

什么是函数式接口呢?

如果说,⼀个接口中,要求实现类必须实现的抽象方法,有且只有⼀个!这样的接口,就是函数式接口。

interface InterA{
    public void show();
}

3、用lambda表达式调用参数为接口的方法

interface InterA{
    void show();
}
public class case1 {
    //参数是接口,正常情况下要传一个实现了接口的类才行
    public static void show(InterA a){
        a.show();
    }
    //使用匿名类去实现
    public static void main(String[] args) {
        show(new InterA() {
            @Override
            public void show() {
                System.out.println("hhhh");
            }
        });

    //使用lambda去简化
    show(()->{
       System.out.println("lllllllll");
    });

    }

}

4. Lambda表达式进行遍历集合(forEach)

需要用到forEach方法

我们这里来列举一个遍历Map的例子

public class Map遍历 {
    public static void main(String[] args) {
        Map<String,Integer> m1 = new HashMap();
        m1.put("zhangsan",100);
        m1.put("lisi",99);
        m1.put("wangwu",98);
        m1.put("maliu",97);

        Set<String> keys = m1.keySet();

        //3.lambda表达式
        keys.forEach(str ->{
            System.out.println(str + " - "+m1.get(str));
        });

    }
}

5.Lambda表达式的语法进阶

参数部分的精简

参数的类型

由于在接口的方法中,已经定义了每⼀个参数的类型是什么。而且在使用lambda表达式实现接口的时候,必须要保证参数的数量和类 型需要和接口中的方法保持⼀致。因此,此时lambda表达式中的参数的类型可以省略不写

注意点:

如果需要省略参数的类型,要保证:要省略, 每⼀个参数的类型都必须省略不写。绝对不能出现,有的参数类型省略了,有的参数类型没有省略。

        //有参+返回值
        Test test = (name,age)  -> {
            System.out.println(name+age+"岁了!");
            return age + 1;
        };
        int age = test.test("小新",18);
        System.out.println(age);

参数的小括号

如果方法的参数列表中的参数数量 有且只有⼀个,此时,参数列表的小括号是可以省略不写的。

注意事项:

  • 只有当参数的数量是⼀个的时候, 多了、少了都不能省略。
  • 省略掉小括号的同时, 必须要省略参数的类型
Test test = name -> System.out.println(name+"test");
        test.test("小新");

return的精简

如果⼀个方法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉大括号的同时, 也必须省略掉return。

Test test = (a,b) -> a+b;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值