Java 8 新特性之 Stream 流基础体验
Java 8 新特性之 Stream 流基础体验
package com.company; import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream; public class Main {
public static void main(String[] args) {
learnStream();
} public static void emptyLine(){System.out.println();System.out.println();} public static void learnStream() { ////首先,创建一个1-6乱序的List
List<Integer> lists = new ArrayList<>();
lists.add(4);
lists.add(3);
lists.add(6);
lists.add(1);
lists.add(5);
lists.add(2); //遍历list
System.out.print("lists数据:");
for (Integer elem : lists) {
System.out.print(elem + ",");
} emptyLine(); //获取list中的最小值
System.out.print("list中的最小值:");
Stream<Integer> stream = lists.stream();
Optional<Integer> min = stream.min(Integer::compareTo);
if (min.isPresent()) {
System.out.println(min.get());
} emptyLine(); //获取list中的最大值
System.out.print("list中的最大值:");
lists.stream().max(Integer::compareTo).ifPresent(System.out::println); emptyLine(); //排序
System.out.print("排序:");
Stream<Integer> sorted = lists.stream().sorted();
sorted.forEach(elem -> System.out.print(elem + ",")); emptyLine(); //过滤
System.out.print("过滤list,只留下大于3的元素:");
lists.stream().filter(elem -> elem > 3).forEach(elem -> System.out.print(elem + ",")); emptyLine(); //过滤
System.out.print("过滤list,只留下大于0并且小于4的元素:");
lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).forEach(elem -> System.out.print(elem + ","));
emptyLine();
System.out.print("过滤list,只留下大于0并且小于4的元素,并排序:");
lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ",")); emptyLine(); //自定义过滤
Predicate<Integer> elme1 =(param) -> (param>0);
Predicate<Integer> elme2 =(param) -> (param<4);
System.out.print("过滤list,只留下大于0并且小于4的元素,并排序:(使用自定义过滤)");
lists.stream().filter(elme1).filter(elme2).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ",")); emptyLine(); //经过了前面的这么多流操作,我们再来看看List里面的值有没有发生什么改变
//遍历list
System.out.print("原来lists数据:");
for (Integer elem : lists) {
System.out.print(elem + ",");
} }
}
结果

Optional可谓是NullPointException的大杀器啊
Stream可以只通过一行代码就实现多线程的并行计算。
中间操作包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。
终止操作包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator。
关于Stream的每个方法如何使用就不展开了,更详尽的介绍看这篇文章:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/
Java 8 新特性之 Stream 流基础体验的更多相关文章
- JDK8新特性关于Stream流
在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: 1 2 3 ...
- java1.8新特性之stream流式算法
在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...
- 乐字节-Java8新特性之Stream流(上)
上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...
- 【Java8新特性】- Stream流
Java8新特性 - Stream流的应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- Java 8新特性之Stream(八恶人-3)
“You John Ruth The Hangman” 绞刑者鲁斯·约翰 “When the Hangman catches you, you hang.”当被绞刑者抓住了,你肯定会被绞死 一.基本介 ...
- java 8 新特性之Stream的排序/分类
Stream简介 Stream是Java8提供的一个新的API,它位于java.util.stream包下.Stream API提供了一种新的方式来对Java集合进行操作,这种操作方式极大的提高了Ja ...
- java8新特性之stream流
Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效. ...
- Java8新特性之Stream流(含具体案例)
一.概述 Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素 ...
- JDK8新特性之Stream流
是什么是Stream流 java.util.stream.Stream Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西. 流可以简单的说是处理数据集合的东西,可以申明式流式A ...
随机推荐
- 学习elasticsearch(一)linux环境搭建(3)——head插件安装
对于5.x的es,head插件不支持 ./elasticearch-plugin install [plugin_name]方式安装. 进入正文 1.首先确保你的机器安装了python,如果没有,请看 ...
- 常量和iota
定义常量时如果不是必须指定特定类型,可以省略类型,使用默认类型.且数值类型常量(不定义类型)可以直接进行运算 常量的值可以是表达式,但是不允许出现变量 func main() { const a st ...
- Spring-简介-IOC理论推导
1.Spring 1.1.简介 Spring:春天----->给软件行业带来了春天! 2002,首次推出了Spring框架的雏形:interface21框架! Spring框架即以interfa ...
- H5 页面 rem 布局适配方法
rem 布局适配方案 主要方法为: 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小: css 中,设计稿元素的宽.高.相对位置等取值,按照同等比例换算为 re ...
- 第四章 Jinja2模版
模板简介: 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中的页面大多是带有样式和复杂逻辑的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最知名好用的 ...
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (LCT维护连通性)
直接把x设为根,然后查询y所在联通块的根是不是x就行了. CODE #include <cstdio> #include <cstring> #include <algo ...
- MyEclipse运行项目出现 The user operation is waiting for "Building workspace" to complete
如图所示 解决方式 1.选择菜单栏的“Project”,然后把菜单栏中“Build Automatically”前面的对钩去掉. 2.当你修改或添加代码后,选择菜单栏的“Project”,然后选择菜单 ...
- C语言位运算题解
#include <stdio.h> #include <stdlib.h> #include <string.h> //#define NONBLANK 1 ma ...
- Java项目出现的问题01----学习
0 运行环境 MyEcplise2016+Tomcat8.0 1 今天在html的表格提交跳转时发现,想要提交到自己写servlet程序中,却发现总是出错http://localhost:8080/T ...
- http range request
range request: 要求实现该功能需要指定下载的实体范围