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 流基础体验的更多相关文章

  1. JDK8新特性关于Stream流

    在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: 1 2 3 ...

  2. java1.8新特性之stream流式算法

    在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...

  3. 乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

  4. 【Java8新特性】- Stream流

    Java8新特性 - Stream流的应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...

  5. Java 8新特性之Stream(八恶人-3)

    “You John Ruth The Hangman” 绞刑者鲁斯·约翰 “When the Hangman catches you, you hang.”当被绞刑者抓住了,你肯定会被绞死 一.基本介 ...

  6. java 8 新特性之Stream的排序/分类

    Stream简介 Stream是Java8提供的一个新的API,它位于java.util.stream包下.Stream API提供了一种新的方式来对Java集合进行操作,这种操作方式极大的提高了Ja ...

  7. java8新特性之stream流

    Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效. ...

  8. Java8新特性之Stream流(含具体案例)

    一.概述   Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素 ...

  9. JDK8新特性之Stream流

    是什么是Stream流 java.util.stream.Stream Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西. 流可以简单的说是处理数据集合的东西,可以申明式流式A ...

随机推荐

  1. CodeForces - 1221E Game With String 分类讨论

    首先分析A能获胜的情况 A能获胜 当且仅当A拿完后所有剩下的都<b 所以一旦存在一个大小为X的 且 b<=X<a 则必是后手赢 当X为 a<=x<2*b 的时候 无论A或 ...

  2. 简单的jquery进度条插件LineProgressbar.js,myProgress.js

    参考   http://www.lanrenzhijia.com/jquery/4121.html demo下载 <script src="js/jquery.lineProgress ...

  3. Spring入门篇——第6章 Spring AOP的API介绍

    第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...

  4. 洛谷P3600随机数生成器——期望+DP

    原题链接 写到一半发现写不下去了... 所以orz xyz32768,您去看这篇题解吧,思路很清晰,我之前写的胡言乱语与之差距不啻天渊 #include <algorithm> #incl ...

  5. 从ORM框架到SQLAlchemy

    一.ORM 1.什么是ORM 对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中 ...

  6. 进程通过内核缓存区请求设备I/O的一些事情

    请求进程,内核缓存区,设备I/O 请求进程无法直接访问设备I/O,而是通过内核缓冲区提交请求数据,等数据就绪后,数据从设备缓冲区提交至进程空间 请求进程把数据提交给内核缓存空间需要等待,内核把数据复制 ...

  7. 关于properties文件的读取(Java/spring/springmvc/springboot)

    一.Java读取properties文件 1.基于ClassLoder读取配置文件 注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便. Properties prope ...

  8. 【Android-SwipeRefreshLayout控件】下拉刷新

    Android自带API ,V4包下面的下拉刷新控件 android.support.v4.widget.SwipeRefreshLayout SwipeRefreshLayout只能包含一个控件 布 ...

  9. 原生JS实现拖动滑块验证登录效果

    ♀分享一组利用原生JS实现拖动滑块验证效果 ♀在这个组代码中涉及三个方面的知识: ⑴事件处理 ⑵添加验证标记 ⑶选择器的封装   代码如下: <!DOCTYPE html> <htm ...

  10. Luogu P5048 [Ynoi2019模拟赛]Yuno loves sqrt technology III 分块

    这才是真正的$N\sqrt{N}$吧$qwq$ 记录每个数$vl$出现的位置$s[vl]$,和每个数$a[i]=vl$是第几个$vl$,记为$P[i]$,然后预处理出块$[i,j]$区间的答案$f[i ...