java stream

Posted 隐林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java stream相关的知识,希望对你有一定的参考价值。

一、定义

public interface Stream<T>
extends BaseStream<T,Stream<T>>

Stream是jdk1.8引入的,和lambda表达式一起,大大方便了我们的编程。stream不是一种数据结构,它是数据的视图。所以它不是一个数据源,通过数组或者集合来创建:
  -Collection.stram()或
Collection.parallelsStream()
  -Array.stream()

二、常用函数

  stream的操作分为两类:中间操作和结束操作。

  中间操作:就是流的中间状态,它是惰性操作,不立即执行,每次调用中间操作只是产生一个新的stream视图而已。

      结束操作:流最后的执行结果。

 

  常用的中间操作:filter(过滤),map(转换),sorted(排序),distinct(去重);

      常用的结束操作:collect(),max(最大),min(最小),forEach(遍历),findFirst(返回第一个)

  这些操作基本上很常用也很简单,主要是这个collect()收集器,下面我们看看这个collect()操作。

stream.collect()将一个stream转为一个集合需要哪些东西呢?

  1.目标集合

  2.每个数据的操作

  3.最后数据的合并操作

所以collect()就定义为:

<R> R collect(Supplier<R> supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);

但显然这样操作太麻烦了,所以jdk提供了一个更加简单但方式:
<R, A> R collect(Collector<? super T, A, R> collector);
可以通过Collections的工具类生成Collector,这样就很方便了。

collect()生成list:
ArrayList list = stream.collect(Collectors.toList())

collect()生成map:
Map<Integer,User> map = stream().collect(Collectors.toMap(User::getId,Function.identity()));

stream只要你用溜了,写起代码来会大大方便很多,省去了我们很多自己编码,所以要掌握好啊。



参考文献:
https://www.cnblogs.com/CarpenterLee/p/6545321.html

 

以上是关于java stream的主要内容,如果未能解决你的问题,请参考以下文章

Java8 Stream针对List先分组再求和最大值最小值平均值等

read ECONNRESET at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20) { errno: -4077(代码片段

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

java 8 Stream 代码清单+API介绍

java代码之美---Java8 Stream