首页 > 编程语言 >Java学习笔记---JDK8新特性(Lambda表达式)

Java学习笔记---JDK8新特性(Lambda表达式)

时间:2022-09-20 22:22:34浏览次数:70  
标签:返回 Stream Java num1 num2 元素 --- JDK8 Comparator

1. Lambda表达式基础

  • 格式:
() -> {};
  // () 为lambda表达式的参数
  // -> 为箭头操作符
  // {} 为lambda方法体

  lambda表达式结果为一个实例对象,用于直接实例化接口。

  • 使用举例:
Comparator<Integer> comparator = (num1, num2) -> {return Integer.compare(num1, num2)};
  • 注意事项:
    1. 当输入参数只有一个时,可以省略括号; 其余情况(0个或是多个)都需要有括号。
    
    例:
      Consumer<Integer> consumer = (param) -> {System.out.println(param);};
    优化:Consumer<Integer> consumer = param -> {System.out.println(param);};
    2. 当方法体中只有一条语句时,大括号可以省略,若一条语句是return,则return也可以省略。 例:
      Comparator<Integer> comparator = (num1, num2) -> {return Integer.compare(num1, num2);};
    优化:Comparator<Integer> comparator = (num1, num2) -> Integer.compare(num1, num2);
  • 特殊情况:
若在lambda体中的操作,已经有实现的方法了,就可以使用方法引用。

例:
    Comparator<Integer> comparator = (num1, num2) -> Integer.compare(num1, num2);

    优化:Comparator<Integer> comparator = Integer :: compare;
  • 常用的函数接口
    消费型接口 :Consumer<T> 抽象方法为:void accept(T t);
                    
    
    生产型接口 :Supplier<T> 抽象方法为:T get();
    
    
    函数型接口:Function<T, R> 抽象方法为:R apply(T t);
    
    
    断定型接口:Predicate<T> 抽象方法为:boolean test(T t);
    

2. Stream API

  • 如何创建Stream实例对象。
    方法一(通过集合):
        JDK8中Collection接口被拓展,提供了两个获取流的方法:
            stream(): 获取一个顺序流
            parallelStream(): 获取一个并行流
    例:
        Stream<Integer> stream = list.stream();
        Stream<Integer> integerStream = list.parallelStream();
    
    方法二(通过数组):
        JDK8中Arrays中的静态方法stream()可以获取数组流
    例:
        IntStream intStream = Arrays.stream(new int[]{1, 2, 3, 4, 5});
    
    方法三:
        调用Stream类的of()创建一个流
    例:
        Stream<Integer> integerStream = Stream.of(1, 2, 4, 5, 6);
    
    方法四(无限流):
        调用Stream类的静态方法iterate() 或 generate()
  • Stream的常用中间操作
    1. 筛选与切片
        filter(Predicate p) 接受一个断定型函数,按照此函数过滤流中的数据。
        distinct() 去重,通过hashcode() 和 equals() 去除重复元素。
        limit(long maxSize) 截断流,使其元素不超过maxSize。
        skip(long n) 跳过元素,返回一个去除前N个元素的流,若元素不足N个,则返回一个空流。
    
    2. 映射
        map(Function f) 接受一个函数,按照此函数将流中每个元素映射成一个新元素。
        flatMap(Function f) 接受一个函数,将流中的每个值都换成另一个流,最后结合成一个流返回。
    
    3. 排序
        sorted() 按照自然排序生成一个新流。
        sorted(Comparator c) 按照所给比较器对象,排序生成一个新流。
  • Stream的常用终止操作(流进行了终止操作后,不可再次使用)
    1. 匹配与查找
        allMatch(Predicate p) 检测所有元素是否符合,最终返回true或者false。
        anyMatch(Predicate p) 检测是否至少有一个元素符合,最终返回true或者false。
        noneMatch(Predicate p) 检测是否所有元素都不符合,最终返回true或者false。
        findFirst() 返回第一个元素。
        findAny() 返回任意一个元素。
    
    2. 归约
        reduce(T iden, BinaryOperator b) 将流中所有元素按传入的BinaryOperator反复结合起来,最后在结合iden初始值,返回T。
        reduce(BinaryOperator b) 将流中所有元素按传入的BinaryOperator反复结合起来,返回Optional<T>。
    
    3. 收集
        collect(Collector c) 将最终的结果从流转换为其他形式的容器,Collector实用类中提供了很多静态方法,可以方便的创建常用的收集器实例。

标签:返回,Stream,Java,num1,num2,元素,---,JDK8,Comparator
From: https://www.cnblogs.com/Lthree/p/16712815.html

相关文章

  • 前端面试总结03-原型与原型链
    class之间的继承    类型判断   原型链   原型关系:1.每个class都有显式原型prototype2.每个实例都有隐式原型__proto__3.实例的__proto__指向对......
  • Java单例模式
    单例模式  单例模式核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。使用场景  需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过......
  • Java面向对象初探
    Java面向对象1.类和对象1.1类和对象的概念:类是抽象的集合,对象是具体的实例。类可以想象为制作蛋糕的模具,对象就是做出来的蛋糕。类中包含属性(字段)和方法(操作)1.2类......
  • Java基础08 自增自减运算符、初识Math类
    publicstaticvoidmain(String[]args){//++--自增自减一元运算符inta=3;intb=a++;//执行完这行代码后,先给b赋值,再自......
  • CSP-S模拟6 题解
    开个坑,今后我要写题解了!A.玩水挺有趣的一道题,我们首先从\(2\)条路径的情况考虑符合答案的路径一定满足这种格式:两条路径先重合,再分开,最后再重合观察一下,注意到第一......
  • “EXP-00003: 未找到段 (0,0) 的存储定义”错误
    导出oracle11.2.0.2的服务器的数据时,报“EXP-00003:未找到段(0,0)的存储定义”错误。初步分析是由于数据表是空表导致该问题。Oracle11G在用EXPORT导出时,空表不能导......
  • java: Bridge Patterns
     /***版权所有2022涂聚文有限公司*许可信息查看:*描述:*桥梁模式BridgePatterns*历史版本:JDK14.02*2022-09-12创建者geovindu*2022-09-12......
  • Vin-Mono论文阅读笔记(二)
    估计器初始化简述单目紧耦合VIO是一个高度非线性的系统,需要在一开始就进行准确的初始化估计。通过将IMU预积分与纯视觉结构进行松耦合对齐,我们得到了必要的初始值。理解:......
  • CSP-S模拟6
    A.玩水一直以为这是\(dp\),但是只是一个性质/结论code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;i......
  • 归档 220920 | CSP-J 复习
    所以为什么要复习J组所以为什么我连J组都不会,哭唧唧A.加工零件一开始的想法是,如果点\(x\)离\(1\)的距离大于等于\(L\),且与\(L\)奇偶性相同,那么就可行。然......