zoukankan      html  css  js  c++  java
  • Lambda表达式看这篇基本就够用了

         本文讯】 2020.05.08  polo  写博不易,尊重知识!

         Lambda  是java8 引入的一个新特性,闭包,又叫函数式接口,下面介绍下,常用的lambda表达式方式:

         所谓的将函数作为一个参数传给方法,这是Lambda的一个特性;

         以下是lambda表达式的重要特征:

    • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。(解释:就是不必要再lambda中声明这个变量具体是什么数据类型
    • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
    • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
    • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

         初见:

     1.x -> 2 * x  这就是一个参数,一个表达式,也没有声明数据类型,就是说这个时候啊,你可以把圆括号省略,后面运算表达式也可以不用大括号括起来;
     2.(x, y) -> x  y  哎呀,两个参数,那就得用括号括起来了,一个表达式,好吧,你可以不写了;
     3.(int x,int y)-> x-y 当然你也可以声明,你声明了,也没有人能够咋滴你!  

    这就是它的基本格式;

    1.lambda表达式之分组:
      List<String> list = new ArrayList<String>();
      list.add("one");
      list.add("two");
      list.add("three");
      list.add("four");
      list.add("five");

        Map<Integer,List<String>> ml =  list.stream().collect(Collectors.groupingBy(x->x.length()));//按照list中字符长度进行分组

        System.out.println(ml);
    在控制台打印的结果如下:
    {3=[one, two], 4=[four, five], 5=[three]} 看到了吗,字符长度为3的有 one,two;字符长度为4的有four,five。。。。
    利用这个特性我们是不是,可以利用这点进行对list,进行分组了;
    
    
    2.lambda表达式之list遍历:
    
    
      List<String> list = new ArrayList<String>();
      list.add("one");
      list.add("two");
      list.add("three");
      list.add("four");
      list.add("five");
        list.forEach(x->{
    System.out.println(x);
    });
       打印结果:

        one
        two
        three
        four
        five

    看懂了吗,这就是打印list里面每个数据,x如果是对象,不就可以对这个对象x进行操作了,但要注意的是表达式里面的变量,只能是final的,不可改变的;


    3.lambda表达式之filter条件过滤
      List<String> list = new ArrayList<String>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    list.add("five");

    list.stream().filter(x->
    x.length()==3 //条件
    ).forEach(t->{
    System.out.println(t);
    });
      看到了吗,filter的作用就是条件过滤,还可以连写哦;


    4.lambda表达式之map转换
    List<String> list = new ArrayList<String>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    list.add("five");



    List<Integer> lengths = list.stream().filter(x -> x.length()==3).map(y->y.length())
    .collect(Collectors.toList());
    System.out.println(lengths);

    控制台打印:
    [3, 3]
    这就是说,利用map可以返回一个新的list,如果是对象,你可以取出对象中某个属性,然后重组一个新的list;


    5.lambda表达式之allMatch、anyMatch、noneMatch

      allMatchStream中全部元素符合传入的predicate返回 true

      anyMatchStream中只要有一个元素符合传入的predicate返回 true

      noneMatchStream中没有一个元素符合传入的predicate返回 true

      List<String> list = new ArrayList<String>();
      list.add("one");
      list.add("two");
      list.add("three");
      list.add("four");
      list.add("five");



      Boolean bl = list.stream().anyMatch(x->x.length()==4);
      System.out.println(bl);
        打印true


    待续。。。

    
    
  • 相关阅读:
    Constants and Variables
    随想
    C#基础篇之语言和框架介绍
    Python基础19 实例方法 类方法 静态方法 私有变量 私有方法 属性
    Python基础18 实例变量 类变量 构造方法
    Python基础17 嵌套函数 函数类型和Lambda表达式 三大基础函数 filter() map() reduce()
    Python基础16 函数返回值 作用区域 生成器
    Python基础11 List插入,删除,替换和其他常用方法 insert() remove() pop() reverse() copy() clear() index() count()
    Python基础15 函数的定义 使用关键字参数调用 参数默认值 可变参数
    Python基础14 字典的创建修改访问和遍历 popitem() keys() values() items()
  • 原文地址:https://www.cnblogs.com/luojiesheng/p/lambda.html
Copyright © 2011-2022 走看看