深入理解Java 8 Stream
Java 8中新增了Stream,主要是lambda表达式的应用,其链式调用简洁,用于高效表达集合操作。
先对Stream的使用做了解,参照blog。
(1) 生成Stream的方式
主要有以下几种
1. 数组 - Array
String[] arr = {"gh","shf","awuygwi"};
Stream.of(arr).forEach(System.out::println);
Arrays.stream(arr).forEach(System.out::println);
2. 集合 - Collection
List<String> list = Arrays.asList(arr);
list.stream().forEach(System.out::println);
Stream.of(list).forEach(System.out::println);
3. 文件io
String filePath = "xxx";
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
reader.lines().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
(2) Stream的操作分Intermediate, Terminal和short-circuiting
1. Intermediate操作
构成链式调用的部分,做过滤/映射等。该类型操作不会立即对元素作用,直到Terminal操作开始起作用。
常见的比如,filter(), map()/flatMap(), sorted(), limit()
2. Terminal操作
Terminal操作生成最终结果。一个Stream对应一个Terminal操作。
常见的比如,forEach(), collect(), min(), max(), count(), findFirst()
3. short-circuiting操作
short-circuiting常用于操作无限Stream,比如allMatch(), findFirst(), limit()
以下是使用Stream的一个例子,
filter,mapToInt 为Intermediate操作;sum为Terminal操作
int sum = widgets.stream().filter(w -> w.getColor() == RED).mapToInt(w -> w.getWeight()).sum();
(3) Stream典型用法
参照blog,实践中...
深入理解Java 8 Stream的更多相关文章
- 关于java中Stream理解
关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- 《深入理解Java函数式编程》系列文章
Introduction 本系列文将帮助你理解Java函数式编程的用法.原理. 本文受启发于JavaOne 2016关于Lambda表达式的相关主题演讲Lambdas and Functional P ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- [零]java8 函数式编程入门官方文档中文版 java.util.stream 中文版 流处理的相关概念
前言 本文为java.util.stream 包文档的译文 极其个别部分可能为了更好理解,陈述略有改动,与原文几乎一致 原文可参考在线API文档 https://docs.oracle.com/jav ...
- 深入理解Java中的IO
深入理解Java中的IO 引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java > 本文的目录视图如下: ...
随机推荐
- codeforce div2 426 D. The Bakery
D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...
- Java中的IO基本用法
先贴一下我在作业中用到的三种文件输入辅助类.三种文件输出辅助类 public class BuffIn implements InHelp{ private BufferedReader buffer ...
- TDictionary字典 记录 的赋值。
type TRen = record age: Integer; //把name定义成结构的属性. private Fname: string; procedure Setname(const Val ...
- Android开发 大坑Fragment
是不是弄了半天你的Fragment老是Replace不了,我的原因是:弄成静 态的,然后要动态Replace,竟然不行,后来框个FragmentLayout,改成全动态添加和Replace,OK了.
- UVA - 294 Divisors【数论/区间内约数最多的数的约数个数】
Mathematicians love all sorts of odd properties of numbers. For instance, they consider to be an int ...
- [Machine Learning with Python] Data Preparation through Transformation Pipeline
In the former article "Data Preparation by Pandas and Scikit-Learn", we discussed about a ...
- asp.net获取URL方法
方法如下: Request.Url.ToString()获取完整url(协议名+域名+站点名+文件名+参数):https://localhost:44300/WebForm1.aspx?abc=123 ...
- Linux基础学习5
程序管理与SELinux初探 process&program 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘.光盘.软盘.磁带等), 为实体档案 ...
- 【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
@SpringCloudApplication和@SpringBootApplication的区别
- 3D立体显示技术原理与游戏应用历程简介 【转】
本文来自 中关村ZOL 「3D 立体显示」可说是近来娱乐产业相当热门的话题,不但有好莱坞推出<阿凡达>等卖座 3D 立体电影,全球各大家电厂商也积极布局准备推出一系列支持 3D 立体显示的 ...