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

    【技术的道路上,要知其然,更要知其所以然】
  • 相关阅读:
    Maven的pom文件依赖提示 ojdbc6 Missing artifact,需要手动下载并导入maven参考
    Maven全局配置文件settings.xml详解(转)
    SpringBoot -- 项目结构+启动流程
    64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;
    Spring家族主流成员介绍
    java 中文与unicode互转
    Netty的Marshalling编解码器
    解决svn迁移过程中出现:SVN Error: is not the same repository as的问题
    netty入门实例
    Dubbo的使用及原理
  • 原文地址:https://www.cnblogs.com/weisiren/p/7710941.html
Copyright © 2011-2022 走看看