美文网首页Java基础
Java基础-Java8特性-Lambda表达式和Stream

Java基础-Java8特性-Lambda表达式和Stream

作者: 其实是白羊 | 来源:发表于2019-08-23 10:27 被阅读0次

    Lambda表达式可以理解为:简写的函数式接口的实现。
    对于“函数式接口”的简化写法(和其他特性结合构成更加简洁的代码结构)

    函数式接口:接口中只有一个抽象方法(可以有默认方法和静态方法),为了保障只有一个抽象方法,可以在接口上添加@FunctionalInterface注解

    1.语法

    (参数)->{

    实现方法的方法体 ;

    }

    注:参数和方法体只有一个(一条一句)时,()和{}可以省略。

    2.用法

    • 配合集合的.forEach()方法进行遍历,例如:list.forEach(p->syso(p));

    还可以再进行简化list.forEach(system.out::println);(解释下这里每次遍历只有一个值所以参 数不用写啦,方法前用::标识)

    • 代替匿名内部类(前提是接口为“函数式接口”),如创建线程:new Thread(()->syso()).start();

    再如排序:list.sort((o1,o2)-> return o1.param()-o2.param());

    • Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等

      • filter():过滤数据,例如:list.stream().filter(p->(p>10)).forEach();(注意后面的lambda体这次试用()括起来的而不是{})

      • collect():将stream转成集合,例如:list.stream().filter(p->(p>4)).collect(Collectors.toList()/toSet());

      • distinct():排除相同的元素

      • limit():取前几条 limit(3)

      • skip():抛弃前几个

      • map():接受一个方法做参数,这个方法会作用在每个元素身上,并将其映射成一个新的函数,例如:list.stream().map(Person::getAge).map(String::length).map(s->s.split()).forEach(...);

      • flatMap():和map有点区别,他能让我们操作到类似List<List<?>>这种结构中的内层容器的元素。流的扁平化如List<List<String>>这种结构,list.stream().flatMap(list->list.stream())

    如果对你有帮助的话,可以点个喜欢加个关注哦,谢谢。
    (如果哪里写的不对,还请大佬不吝赐教)

    相关文章

      网友评论

        本文标题:Java基础-Java8特性-Lambda表达式和Stream

        本文链接:https://www.haomeiwen.com/subject/pdrzsctx.html