• 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
  • 相关阅读:
    列表
    Lambda表达式
    委托
    泛型(二)
    泛型(一)
    继承
    object类
    linux 命令补全包
    记一次 mysql 安装完成后启动报错 且 日志为空
    nginx 下配置https 访问提示下载文件 解决方法
  • 原文地址:https://www.cnblogs.com/zqf-bczl/p/13765473.html
Copyright © 2020-2023  润新知