• lambda表达式已经成为了开发者必须要掌握的技能?


    lambda表达式

    lambda表达式是什么

    引用百度百科

    “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

    个人理解:简化了匿名函数的一种语法。

    为什么要使用lambda表达式

    使用lambda表达式能大量减少开发的代码量,并且能提高效率,java从JDK1.8开发支持lambda表达式。

    例:

     1         List<String> list = Arrays.asList("aa", "cc", "bb");
     2         //不用lambda: Comparator比较器类定义排序规则 排序
     3         list.sort(new Comparator<String>() {
     4             @Override
     5             public int compare(String o1, String o2) {
     6                 return o1.hashCode() - o2.hashCode();
     7             }
     8         });
     9 
    10         //使用lambda(好处:缩减了大部分代码)
    11         list.sort((o1, o2) -> o1.hashCode() - o2.hashCode());
    12 
    13         System.out.println(list);

    我在工作过程中遇到的一些使用lambda表达式

    注:下面的例子Person类:name和age属性

     1         //普通类型:定义了一个Person类(属性:姓名和年龄)
     2         List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
     3                                              new Person("lisi", 18),
     4                                              new Person("wangwu", 50));
     5 
     6         //需求一:按照 人员的年龄进行排序
     7         persons.sort((p1, p2) -> p1.getAge() - p2.getAge());
     8         System.out.println(persons);
     9 
    10      //需求二:统计出 所有人员的年龄综合,平均值,最大值,最小值
    11         System.out.println("年龄总和:" + persons.stream().mapToInt(p -> p.getAge()).sum());
    12         System.out.println("年龄平均值:" + persons.stream().mapToInt(p -> p.getAge()).average());
    13         System.out.println("年龄最大值:" + persons.stream().mapToInt(p -> p.getAge()).max());
    14         System.out.println("年龄最小值:" + persons.stream().mapToInt(p -> p.getAge()).min());
    15 
    16         //第一个元素
    17         System.out.println("第一个:" + persons.stream().mapToInt(p -> p.getAge()).findFirst());
    18 
    19         //需求n...

    Stream方法

    map方法: 能转换集合的类型

     1         List<Person> persons = Arrays.asList(new Person("张三", 20),
     2                 new Person("李四", 18),
     3                 new Person("王五", 50));
     4 
     5         //Person类转换成Interge类型
     6         List<Integer> collect1 = persons.stream().map(p -> {
     7             return p.getAge();
     8         }).collect(Collectors.toList());
     9         System.out.println(collect1);
    10 
    11         //遍历集合,转换成 姓李的人员
    12         List<PersonLi> collect2 = persons.stream().map(p -> {
    13             PersonLi li = new PersonLi();
    14             if(p.getName().indexOf("李") == 0){
    15                 li.setName(p.getName());
    16                 li.setAge(p.getAge());
    17                 return li;
    18             }
    19             return null;
    20         }).filter(pf -> pf != null).collect(Collectors.toList());
    21         System.out.println(collect2);

    filter: 过滤

     1 List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
     2                 new Person("lisi", 18),
     3                 new Person("wangwu", 50));
     4 
     5         //只需年龄小于30岁的
     6         List<Person> collect = persons.stream().filter(p -> p.getAge() <= 30).collect(Collectors.toList());
     7         System.out.println(collect);
     8 
     9         Person person = persons.stream().filter(p -> p.getAge() <= 30).findAny().get();
    10         System.out.println(person);

    ...还有redule方法,等等..(...暂时没用到),有读者用到可以分享一下自己工作中遇到的。

  • 相关阅读:
    devstack安装openstack
    Stacks of Flapjacks
    二、Reids基础命令--字符串
    数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random
    利用Powershell获取公司内部机器的资源信息,作为企业兴许资产管理的基本途径!
    《编程导论(Java)&#183;3.2.4 循环语句》
    Android自己主动检測版本号及自己主动升级
    基于bootstrap的富文本框——wangEditor【欢迎增加开发】
    找球号(三)
    #308 (div.2) B. Vanya and Books
  • 原文地址:https://www.cnblogs.com/liyong888/p/12081475.html
Copyright © 2020-2023  润新知