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类型。

【技术的道路上,要知其然,更要知其所以然】
原文地址:https://www.cnblogs.com/weisiren/p/7710941.html