java --- lambda表达式

发布时间:2023年12月18日

目录

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;

文章来源:https://blog.csdn.net/flyingcloud6/article/details/135006568
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。