lambda表达式

lambda是JDK8之后推出的一个特性,让我们可以函数式编程
lambda可以更简单的完成匿名内部类的创建

语法规则

([参数列表])->{

方法体

};

使用lambda创建的匿名内部类所属结构必须只能有一个抽象方法。否则无法使用。
凡是能用lambda表达式的接口 都会有FunctionaInterface注解。

示例

无参数的lambda表达式

    /*
     * 匿名内部类创建Runnable
     */
    Runnable r1 = new Runnable() {
        public void run() {
          System.out.println("hello");
        }
    };

    /*
     * lambda表达式创建
     */
    //编译器根据代码进行分析。这时编译器认可的,最终编译器会将代码改为原来的形式。
    Runnable r2 = ()->{
      System.out.println("hello");
    };    
     
    //如果方法中只有一句代码那么lambda的{}可以省略,即可以写成:
    Runnable r2 = ()->System.out.println("hello");

有参数的lambda表达式

 

     List<String> list = new ArrayList<String>();
        list.add("辽宁");
        list.add("小黑");
        list.add("发黄");
        
        /*匿名内部类创建比较器*/
        Comparator<String> com = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };
        Collections.sort(list,com);
        System.out.println(list);
        
        /*lambda创建*/
        Comparator<String> com2 = (o1,o2)->{
            return o1.length()-o2.length();
        };
        
        Collections.sort(list,com2);
        System.out.println(list);

 

使用lambda来遍历集合和Map

JDK8之后集合和Map推出了一个方法:forEach
该方法可以使用lambda来遍历集合和Map推。

由于该方法是集合自身的方法进行遍历,那么如果集合是一个并发安全的集合时,这种遍历方法是可以和其他集合操作进行互斥的达到并发安全
原迭代器的方式遍历是不与集合自身方法互斥的,需要自行维护并发安全问题。

语法:

list.forEach( (e)->{。。。。} );

 

1    List<String> list = new ArrayList<String>();
2    list.add("1");
3    list.add("2");
4    list.add("3");
5    list.add("4");
6    System.out.println(list);
7         
8    //编译器会根据上下文推测e的类型,此时e为String类型
9    list.forEach((e)->System.out.println(e));

 

//输出结果为
[1, 2, 3, 4]
1
2
3
4

 

 

map.forEach( (k,v)->{。。。。} );

 

1    Map<String, Integer> map = new HashMap<String, Integer>();
2    map.put("辽宁", 55);
3    map.put("李宁", 46);
4    map.put("苏宁", 64);
5    map.put("狗宁", 75);
6    map.put("离宁", 25);
7    System.out.println(map);
8         
9    map.forEach((k,v)->{System.out.println(k+" "+v);});

 

//输出结果为
{苏宁=64, 狗宁=75, 辽宁=55, 离宁=25, 李宁=46}
苏宁 64
狗宁 75
辽宁 55
离宁 25
李宁 46

 

posted @ 2020-10-03 20:55  降温。  阅读(94)  评论(0编辑  收藏  举报