持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
🍊作者简介:少年不想说话,努力长大
🍊往期回顾:
🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩
书接上文的stream,今天说说stream的其他一些用法;
of方法
Stream的of方法它是返回一个顺序的Stream流,比如你定义一个set集合,或者定义一个Map集合,通过of方法可以将其转换为一个流转流有两种方式;
1.这种方式直接将值变为Stream流的是通过Arrays.stream(values);达到转换效果;
Stream<String> am0 = Stream.of("am","bm");
2.这种方式通过一个对象传值进而通过StreamSupport.stream达到效果;
String[] am = new String[]{"a","b","c"};
Stream<String> am1 = Stream.of(am);
public static<T> Stream<T> of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
应用场景比如我们有个字符串分析,这样我们可以通过切割成一个数组,然后该数组通过这种方式转换成流就可以用流式方法进行业务逻辑的分析啦;
concat方法
对于这个方法,和String的类似,将两个Stream流拼接在一起,如果两个输入流都是有序的,则结果流是有序的,如果任一输入流是并行的,则结果流是并行的,如果任一流关闭,则两个都是关闭,直接调,没啥说的,代码对这块都做了校验;
Stream<String> am2 = Stream.concat(am0,am1);
count方法
在这里写这个方法的时候要说明一点,一个流应该只被操作一次。如果流实现检测到流正在被重用,它可能会抛出IllegalStateException,该方法返回此流中元素的计数。这是归约的一个特例,是等价于Stream流化后的sum方法的,当然了前面的也说了,count对比这个maptoLong是它的特例,这里是看了官方提示的,稍稍带一句,该处的sum又和reduce
stream.reduce(0,Integer::sum)
类似,当然这个咱们这里只做了解;
System.out.println(am2.mapToLong(o -> 1L).sum()+"------");
System.out.println(am2.count()+"------");
所有如果你有流进行forEach的要注意,避免措施是遇到Stream流就返回一个对象,这样可以避免重复调用的问题;今天说的方法可能of方法有时候会用到多一些,其他两个反正我是很少用到吧;可能某些其他项目用到的多些🥗🥗🥗;
结束结束,那就🛴🛴🛴
如果对你有所帮助
点个赞呗