Stream的一些小方法(三)

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

书接上文的stream,今天说说stream的另外的一些用法

max方法

写这个方法的时候还是思考要不要写,还是决定写下,对于Stream方法我们直接可以调用max方法来取最大值,该方法返回OptionalInt;该方法又是调用**reduce(Math::max)方法;即我们也可以用stream.reduce(Integer::max).getAsInt()**来达到效果;

System.out.println(stream.max().getAsInt()+"------");

对于min方法也是这么来的,对于List集合可以使用则是自己写比较方法;然后调用Optional max(Comparator<? super T> comparator)方法;

al.stream().max((asd,b) -> asd > b ? 1:-1).get()+"------"

如果排序啊,就可以.stream().sorted(Comparator.comparing(e ->XXX))这样达到效果;

peek方法

我们都知道使用Stream流会遇到不好排查的情况,所以我们可以在流中间加上peek方法进行逻辑前后的输出,没有逻辑作用,此方法的存在主要是为了支持调试,所有遇到问题不好定位的时候可以在此处加点日志瞅瞅;

al.stream().filter(o -> o%2 == 0).peek(o -> System.out.print(o+",,")).collect(Collectors.toList());

distinct方法

我们看下该方法用于去重,对于list集合进行去重,返回该流的不同元素,这其中注意不建议并行流使用该方法,如果是并行的转为顺序流;可以使用下面的用例试试;

List<Integer> al = Arrays.asList(1,2,3,8,5,6,7,0,1,3);
al.stream().distinct().forEach(System.out::println);

如果排序直接跟sorted即可,复杂场景字段的排序可以看下我的lambda那篇文章;

al.stream().distinct().sorted().forEach(System.out::println);

还有最后一个就连带着说了,就是MaptoInt方法,这个方法就不单独摘出来了,对于ListMap集合,我们可以方便取到Map里的value值然后进行逻辑运算,比如累加操作,我们看个用例

List<Map<String,Integer>> mms = new ArrayList<>();
Long collect1 = mms.stream().mapToLong(o -> o.get("1")).sum();

当然我们依然可以用Collector操作,也能达到相同效果,不过操作之前记得filter过滤空值,免得空指针;

mms.stream().collect(Collectors.summingDouble(d -> d.get("1")));

好啦好啦,日常操作建议都用Collect操作呦,如果简单逻辑用Stream简单方法操作也行🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗