zoukankan      html  css  js  c++  java
  • java8-Lambda表达式01-初识Lamba表达式

    lambda表达式是java8最具代表性的特性,它是衔接java语言与函数式编程思想的一道桥梁,它给java编程带来革命性的变化。

    先来看几段代码, 对照感受一下:

    1、创建线程

    // 传统的匿名内部类方式
    Thread t1 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello world!");
        }
    });
    
    // lambda表达式方式
    Thread t2 = new Thread(() -> System.out.println("Hello java8"));

    2、通过实现Comparator接口排序

     1 List<String> list = Arrays.asList("java", "go", "python", "c++");
     2 // 传统排序写法
     3 Collections.sort(list, new Comparator<String>() {
     4     @Override
     5     public int compare(String s1, String s2) {
     6         return s1.compareTo(s2); // 按照字典顺序, 升序排列
     7     }
     8 });
     9 
    10 System.out.println("sorted asc: " + list);
    11 Collections.shuffle(list);  // 打乱
    12 System.out.println("shuffled: " + list);
    13 
    14 // lambda方式(带参数类型)
    15 Collections.sort(list, (String s1, String s2) -> s1.compareTo(s2));
    16 System.out.println("sorted asc: " + list);
    17 // lambda方式(不带参数类型)
    18 Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
    19 System.out.println("sorted desc: " + list);

    结果:

    sorted asc: [c++, go, java, python]
    shuffled: [c++, java, python, go]
    sorted asc: [c++, go, java, python]
    sorted desc: [python, java, go, c++]

    3、swing编程里的事件绑定

    // 传统方式绑定事件
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            System.out.println("Add button clicked");
        }
    });
    // lambda 方式绑定事件
    button.addActionListener(e -> System.out.println("click"));

    结论:

     暂且不讨论起编译和运行效率,只从代码的感官层面说:

     优点: 代码量减少,代码变得更加精简, 能够节省一定的编码时间;样板性的代码被屏蔽。

     确点: 缺省了变量类型,会给代码阅读带来不便,如案例3中的变量e,如果不结合调用的上下文,很难一眼看出是ActionEvent类型。

    【技术的道路上,要知其然,更要知其所以然】
  • 相关阅读:
    C#计算一段程序运行时间的三种方法
    jquery easyui combobox设置默认选中第一项
    ASP.NET Web API教程 分页查询
    ASP.NET Web Api 实现数据的分页
    开源.net 混淆器ConfuserEx介绍
    C#软件license管理(简单软件注册机制)
    MyBatis入门实例-包括实体类与数据库字段对应&CLOB字段处理
    MyBatis在insert插入操作时返回主键ID的配置
    MyBatis框架——mybatis插入数据返回主键(mysql、oracle)
    关于java中split的使用
  • 原文地址:https://www.cnblogs.com/weisiren/p/7710941.html
Copyright © 2011-2022 走看看