`
cakin24
  • 浏览: 1330643 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java 8新增的Stream操作

    博客分类:
  • java
阅读更多

一 Stream流概述
1 Java 8还新增了Stream、IntStream、LongStream、DoubleStream等流式API。
2 独立使用Stream的步骤如下:
(1)使用Stream或XxxStream的builder()类方法创建该Stream对应Builder。
(2)重复调用Builder的add()方法向该流中添加多个元素。
(3)调用Builder的build()方法获取对应的Stream。
(4)调用Stream的聚集方法。
3 Collection接口提供了一个stream()默认方法,该方法可返回该集合对应的流,接下来即可通过流API来操作集合元素。由于Stream可以对集合元素进行整体的聚集操作,因此Stream极大了丰富了集合的功能。

 

二 Stream的中间方法和末端方法的应用

1 代码示例

import java.util.stream.*;

public class IntStreamTest
{
	public static void main(String[] args)
	{
		IntStream is = IntStream.builder()
			.add(20)
			.add(13)
			.add(-2)
			.add(18)
			.build();
		// 下面调用聚集方法的代码每次只能执行一个
		//System.out.println("is所有元素的最大值:" + is.max().getAsInt());		//输出20
		//System.out.println("is所有元素的最小值:" + is.min().getAsInt());		//输出-2
		//System.out.println("is所有元素的总和:" + is.sum());					//输出49
		//System.out.println("is所有元素的总数:" + is.count());					//输出4
		//System.out.println("is所有元素的平均值:" + is.average());				//输出 OptionalDouble[12.25]
		//System.out.println("is所有元素的平方是否都大于20:"
		//	+ is.allMatch(ele -> ele * ele > 20));								//输出false
		//System.out.println("is是否包含任何元素的平方大于20:"
		//	+ is.anyMatch(ele -> ele * ele > 20));								//输出true
		// 将is映射成一个新Stream,新Stream的每个元素是原Stream元素的2倍+1
		IntStream newIs = is.map(ele -> ele * 2 + 1);
		// 使用方法引用的方式来遍历集合元素
		newIs.forEach(System.out::println); // 输出41 27 -3 37
	}
}

 

2 运行结果

41
27
-3
37

 

3 代码分析

上面代码先创建了一个IntStream,接下来分别多次调用IntStream的聚集方法执行操作,这样即可获取该流的相关信息。
Stream流提供了大量的方法进行聚集操作,这些方法既可以是“中间的”,也可以是“末端的”。
中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。上面程序中的map()方法就是中间方法。中间方法的返回值是另外一个流。
末端方法:末端方法是对流的最终操作。当对某个Stream执行末端方法后,该流就会被“消耗”且不可再用。上面程序的sum()。count()、average()等方法都是末端方法。

 

三 Stream的filter方法的应用

1 代码示例

import java.util.*;
import java.util.function.*;

public class CollectionStream
{
	public static void main(String[] args)
	{
		// 创建books集合、为books集合添加元素的代码与8.2.5小节的程序相同。
		Collection books = new HashSet();
		books.add(new String("轻量级Java EE企业应用实战"));
		books.add(new String("疯狂Java讲义"));
		books.add(new String("疯狂iOS讲义"));
		books.add(new String("疯狂Ajax讲义"));
		books.add(new String("疯狂Android讲义"));
		// 统计书名包含“疯狂”子串的图书数量
		System.out.println(books.stream()
			.filter(ele->((String)ele).contains("疯狂"))
			.count()); // 输出4
		// 统计书名包含“Java”子串的图书数量
		System.out.println(books.stream()
			.filter(ele->((String)ele).contains("Java") )
			.count()); // 输出2
		// 统计书名字符串长度大于10的图书数量
		System.out.println(books.stream()
			.filter(ele->((String)ele).length() > 10)
			.count()); // 输出2
		// 先调用Collection对象的stream()方法将集合转换为Stream,
		// 再调用Stream的mapToInt()方法获取原有的Stream对应的IntStream
		books.stream().mapToInt(ele -> ((String)ele).length())
			// 调用forEach()方法遍历IntStream中每个元素
			.forEach(System.out::println);// 输出8  11  16  7  8
	}
}

 

2 运行结果

4
2
2
8
11
16
7
8

 

3 代码分析

代码只要调用Collection的stream()方法即可返回该集合对应的Stream,接下来调用Stream提供的方法对所有集合中的元素进行处理,这样可以大大简化集合编程的代码,这也是Stream编程带来的优势。
代码最后一句先调用Collection对象的stream()方法将集合转换为Stream对象,然后调用Stream对象的mapToint()方法将其转换为IntStream,这个mapToInt()方法就是一个中间方法,因此程序可继续调用IntStream的forEach()方法来遍历流中的元素。

0
0
分享到:
评论
1 楼 zhp8341 2016-09-06  
http://www.ccblog.cn/85.htm 附上jdk8lambda基本原理及性能分析

相关推荐

    Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合.md

    Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda,给我们操作集合(Collection)提供了极大的便利。 Stream将要处理的元素集合看作一种流,在流的过程中,借助`Stream API`对流中的...

    《Java 8 in Action》是一本关于 Java 编程语言的书籍,重点介绍了 Java 8 中引入的新特性和改进

    Stream API: 介绍 Java 8 中引入的 Stream API,以及如何使用 Stream API 来处理集合数据和进行流式操作。 新的日期和时间 API: 探讨 Java 8 中新增的日期和时间 API,以及如何使用这些 API 来处理日期、时间和...

    JAVA8的新特性学习笔记

    该笔记主要记录了学习Java8新增特性的全部信息,包含概念讲解及代码示例,主要针对Lambda表达式、函数式接口、方法引用及构造器引用、Stream API、Optional类几个模块深入浅出的介绍了各个模块的使用。希望对大家的...

    一文带你入门Java Stream流,太强了

    Java 8 新增的 Stream 是为了解放程序员操作集合(Collection)时的生产力,之所以能解放,很大一部分原因可以归功于同时出现的 Lambda 表达式——极大的提高了编程效率和程序可读性。 Stream 究竟是什么呢? St

    java8源码-jdk8:Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java

    java8 源码 Java8 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。 Java8 ...

    java 8实战 清晰带书签

    简单地说,Java 8中的新增功能是自Java 1.0发布18年以来,Java发生的最大变化。没有去掉 任何东西,因此你现有的Java代码都能工作,但新功能提供了强大的新语汇和新设计模式,能帮 助你编写更清楚、更简洁的代码。就...

    mac os jdk8

    Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象...

    Java9 Stream Collectors新增功能(小结)

    主要介绍了Java9 Stream Collectors新增功能(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    win jdk-1.8 java 基础环境

    一、Java8(JDK1.8)新特性 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stream API 5、接口中的默认方法和静态方法 6、新时间日期API 7、OPtional 8、其他特性 二、java8(JDK1.8)新特性简介 1...

    jdk8-112安装包.rar

    Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象...

    JAVA中的1.8新特性-质问老程序员你确定你看得懂java代码吗?

    java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式、函数式接口、方法引用、默认方法、新工具(编译工具)、Stream API、Date Time API、Optional等 。 当前很多公司的老产品依然使用的java...

    JAVA - JDK 1.8 API 帮助文档-中文版

    本文档将Java8的新特新逐一添加,比如如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API。祝你Java技术更上一层楼!

    1.简单的定时在数据库添加数据 2.简单的Stream的使用 3.Excel使用jxl和poi框架的读取操作

    Java代码从Excel表(student)中获取所有学生信息,读取之后使用stream方式完成一下 1、获取每一个班级的学生信息并打印输出, 使用map的方式存储 2、输出学生中java 前三名,Linux前三名,总成绩前三名(不考虑相同 ...

    Java9新特性

    主要包含:模块化系统,REPL工具:jshell命令,多版本兼容jar包,语法的新变化:接口私有方法、异常处理、钻石操作符、String存储结构变化等,新增API:Stream、List、Set、图像处理等。可以说java 9 的更新是一个...

    JRE-8u25-windows 64wei

    ava8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象...

    尚硅谷Java9新特性视频

    主要包含:模块化系统,REPL工具:jshell命令,多版本兼容jar包,语法的新变化:接口私有方法、异常处理、钻石操作符、String存储结构变化等,新增API:Stream、List、Set、图像处理等。可以说java 9 的更新是一个...

    java-guide:现代Java指南(Java 17)

    注意:如果您只希望查看Java 14的新增功能,则可以查看其中。 内容 modifiable_vs_mutable.md null_and_optional.md 继承.md exception.md 枚举 nested_classes.md array.md Implementation_interface.md ...

    java8集合源码分析-springboot:学习springboot

    ·Lambda表达式、·Stream操作、·接口默认&静态方法、·方法引用、·重复注解、·类型注解、·日期&时间API、·base64加解密API、·数组并行操作、·JVM新增元空间 Maven优点 ·依赖管理,项目构建·生命周期·插件...

    jdk1.8 64位官方正式版(附安装文档)

    2、显著增加和修改了Java语言特性,增添了标准库,包括默认方法,新的java.util.stream包及 Date-Time API。 3、Compact Profiles包含 Java SE平台预定义子集,使应用程序员无需部署在整个平台,可运行在小型设备上...

Global site tag (gtag.js) - Google Analytics