Lambda表达式 & 引用 & Stream流【总结】

Lambda表达式 & 引用 & Stream流

1. Lambda表达式

  • Lambda表达式的使用前提

    • 有一个接口

    • 接口有且仅有一个抽象方法

  • 省略规则:

    • 参数类型可以省略,但是有多个参数的情况下,不能只省略一个
    • 如果参数有且仅有一个,那么小括号可以省略
    • 如果代码块的语句只有一条,可以省略大括号和分号,有return,return也要一起省略
  • Lambda表达式和匿名内部类的区别

    • 所需类型不同:
      • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
      • Lambda表达式:只能是接口
    • 使用限制不同:
      • 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
      • 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
    • 实现原理不同
      • 匿名内部类:编译之后,产生一个单独的.class字节码文件
      • Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

2. 引用

  • 常见的引用方法

    • 引用类方法

      • 格式:类名:类方法

      • 范例:Integer::parseInt

        Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据

    • 引用对象的实例方式

      • 格式:对象::成员方法

      • 范例:“HelloWorld”::toUpperCase

        String类中的方法:public String toUpperCase()将此String所有字符串转换为大写

    • 引用类的实例方法

      • 格式:类名::成员方法

      • 范例:String::substring

        String类中方法:public String concat(String str):用于拼接字符串

    • 引用构造器

      • 格式:类名::new

      • 范例:HashMap::new

        创建一个HashMap对象

3. Stream流

  • 流的使用

    • 生成流
      通过数据源(集合、数组等)生成流

      例:list.stream()

    • 中间操作
      一个流后面可以跟随零个或多个中间操作,其目的只要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用

      例:filter()

    • 终结操作

      一个流只能有一个终结操作,当这个操作执行后,流就被使用“光“了,无法再被操作,所以这必定是流的最后一个操作

      例:forEach()

  • Stream流的生成方式

    • Collection体系的集合可以使用默认方法stream()生成流
      default Stream stream()
    • Map体系的集合间接的生成流
    • 数组可以通过Stream接口的静态方法of(T…values)生成流
  • 常见中间操作方法

    • Stream filter(Predicate predicate):用于对流中的数据进行过滤
      Predicate接口中的方法 boolean test(T t):对给定的参数进行判断,返回一个布尔值

    • Stream limit(long maxSize):返回此流中的元素组成的流,截取指定参数个数的数据

    • Stream skip(long n):跳过参数个数的数据,返回由该流的剩余元素组成的流

    • static Stream concat(Stream a, Stream b):合并a和b两个流为一个流

    • Stream distinct():返回由该流的不同元素(根据Object.equals(Object))组成的流

    • Stream sorted():返回由此流的元素组成的流,根据自然顺序排序

    • Stream sorted(Comparator comparator):返回由该流的元素组成的流,根据提供的Comparator进行排序

    • Stream map(Function mapper):返回由给定函数应用于此流的元素结果组成的流
      Function接口中的方法 R.apply(T t)

    • InStream map Tolnt(TolntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果

      IntStream:表示原始int流

      ToIntFunction接口中的方法 int apply(T value)

  • 常见终结操作方法

    • void forEach(Consumer action):对此流的每个元素执行操作

      Consumer接口中的方法 void accept(T t):对给定的参数执行此操作

    • long count():返回此流中的元素数

    • collect(Collector<? super T, A, R>):获取一个新的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值