zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux中gdb 查看core堆栈信息
    爱因斯坦名言
    Symbian OS 源码下载方式
    Windows 2003+VS2005+SP1 “无法使用此产品的安装源,请确认安装源存在,并且您可以访问它”的错误
    Visual Studio 2012 Ultimate RTM 序列号
    STL容器erase的使用陷阱
    C++ 迭代器失效
    C++ 类的静态成员详细讲解[静态成员变量链接错误]
    Ubuntu 启动黑屏解决
    android中KSOAP2中的anytype{}问题
  • 原文地址:https://www.cnblogs.com/zqf-bczl/p/13765473.html
Copyright © 2011-2022 走看看