JDK8新特性--Stream

JDK8新特性--Stream

JDK每次更新都会让人惊讶不已,每次更新最主要的目的就是给开发人员提供更佳的开发编程体验,像JDK1.4以后提出的NIO将IO的方式从同步阻塞提升到了性能更佳的同步非阻塞方式。这次JDK1.8更新最大的亮点除了lamada表达式之外,还有极其惊艳的Stream。这里的Stream可不是IO里面的OutputStreamInputStream之类,而是对java中Collection类聚合功能的增强。Stream API配合lamada表达式,极大的提升了编程效率和程序可读性。Stream中支持并行和串行两种聚合方式。

在JDK1.8前我们要做聚合操作怎么做呢?看如下代码:

假设一个用户对象 User有属性username,ID,sex,address等属性,我只需要属性id我们可能就会这么做:

List<User> list=new ArrayList<>();

list.add(User1);
list.add(User2);
list.add(User3);
List<String> addreList=new ArrayList<>();
for(int i=0;i<list.size();i++){
    addreList.add(list.get(i).getAddress());
}

然而在JDK1.8之后我们可以很轻松的就操作了。看如下代码:

List<String> addreList=list.stream().map(user->{
return user.getAddress()}).collect(toList());

看了示例之后确实觉得JDK1.8操作集合特别方便啊,那么Stream是什么呢?

Stream不是集合,可以看成是操作集合的一个容器或者说是一个数据处理工厂,我们无需知道工厂如何处理,只要获取想要的数据就行。在这个容器中可以对集合中的数据完成数据转换的聚合操作并且能同时获取操作的结果。

在Stream有两种操作类型:

    1.Intermdiate:一个Stream后面可以调用任意多个Intermdiate操作方法,其目的主要是打开流,作出某种程度的数据映射/过滤,然后返回一个新的流交给下一步操作,但是这一系列的操作是lazy的,并不是每个操作一一调用。
    2.terminal:顾名思义,terminal操作就是将Stream关闭,一个Stream最多只能有一个terminal操作。
    
    stream的Intermdiate操作有:
    map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered
    Stream的terminal操作有:
    forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator

你可能感兴趣的:(普通)