Lambda杂记

本文深入解析流操作原理,包括流的特性、操作流程及常见API如filter、map、flatMap等,展示如何通过stream、parallelStream创建流,以及limit、skip、concat等方法的运用,最后探讨流的排序、聚合与收集技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       流表面看起来和集合类似
       1.流并不存储其元素,这些元素可能存储在底层的集合中,或者按需生成
       2.流的操作不会修改其数据源
       3.流的操作是尽可能的惰性执行,意味着直至需要结果时,操作才会执行。

       操作流时的典型流程
       1.创建一个流
       2.指定将初始流转换为其他流的中间操作,可能包含多个步骤
       3.应用终止操作,从而产生结果。这个操作会强制执行之前的惰性操作。

       Stream(),parallelStream(),产生当前集合所有元素的顺序流或者并行流

       流的转换会产生一个新的流,它的元素派生于另一个流中的元素,

       Filter 产生一个流,包含当前流中所有满足断言条件的元素。
       Map产生一个流,应用于当前流中所有元素所产生的的结果
       FlatMap <Function<? super T,? extends Stream<? extends R>> mapper>
       通过将mapper应用于当前流中所有元素产生的结果连接到一起而获得的。

       调用stream.limit会返回一个新的流,在n个元素之后结束。对于裁剪无限流的尺寸非常有用
       Stream randoms = Stream.generate(Math::random).limit(100);
       会产生一个包含100个随机数的流
       Stream.skip(n)正好相反,会丢弃前n个元素

       可以使用concat方法将两个流连接起来
       Stream combined = Stream.concat(letter(“Hello”), letter(“World”));

       Diatinct会返回一个流,剔除重复元素按顺序产生,

       流的排序
       Stream long = words.stream().sorted(Compartator.comparing(String::length).reversed());
       最长的字符串排在最前面

       Count 会返回流中元素的数量
       Max和min 返回最大值和最小值。返回的是一乐类型Optional的值
       FindFirst返回的是非空集合中的第一个值

       OPtional start = words.filter(s -> s.startsWith(“Q”)).findFirst;
       找到第一个以Q开头的单词

       不强调第一个匹配,任意一个匹配都可以,就使用findAny方法

       只想知道是否匹配使用anyMatch。
       所有元素 allMatch
       没有任何元素 noneMatch
       这3个都是boolean类型,返回true,终端操作,

       Optional类型
       Optional对象是一种包装器对象,要么包装了类型T的对象,要么没有包装任何对象。

       result = noVowels().limit(10)
        .collect(Collectors.joining(", "));
       joining的作用就是加分隔符。

       Long getCount() 产生汇总后的元素个数
       getSum(),Getaverage()产生汇总后的元素的总合或者平均值,或者在没有任何元素时返回0
       getMax(),getMin(),获得汇总的最大值和最小值。

       GroupingBy产生一个搜集器。
       Counting会对产生搜集到的元素个数。
       Map<String, Long> Counts = locales.collect(groupingBy(Locale::getCountry,counting()));

       maxBy和minBy会接受一个比较器,并产生下游元素中的最大值或最小值
       Map<String,Optional> stateTo =        cities.collect(groupingBy(City::getState,MaxBy(Comparator.comparing(City::getPopulation()))));
       这个可以产生每个州最大的城市。

       Reduce 方法是一种用于从流中计算某个值的通用机制,
       Optional sum = values.stream().reduce((x,y) ->x + y);
       当你有一个对象流的时候,可以使用mapToInt,mapToLong和mapToDouble将其转换为基本类型。

       Range(),rangeClosed(),产生一个由给定范围内的整数构成的XXXStream。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值