Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些常用的Stream流操作;

Stream流简介

A sequence of elements supporting sequential and parallel aggregate operations. Stream流是一个来自数据源的元素队列并支持聚合操作

Stream流中常用方法的分类

  • 1.中间操作
  • 2.终止操作

Stream的常用中间操作

  • 1.peek()--消费流中的每一个元素
 List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().peek(i -> System.out.println(i)).forEach(i-> System.out.println(i));
  • 2.map() mapToInt() mapToDouble()等等--将流中的每一个元素映射为另一个元素
int[] nums={1,2,3,5,6};
int sum = IntStream.of(nums).map(i->i*2).sum();
  • 3.filter()--将流中满足要求的元素过滤出来
 List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().filter(integer -> integer>1).forEach(System.out::println);
  • 4.sort()--将流中的元素按一定的规则排序
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
List<Integer> collect = list.stream().sorted((o1, o2) -> o1 - o2).collect(Collectors.toList());
  • 5.distinct()--去重
 List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().dinstinct().forEach(System.out::println)
  • 6.limit()--截断流只保留指定个数的元素
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().limit(1).forEach(System.out::println);

Stream的常用的终止操作

  • 1.count()-获取流中元素的个数
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
long count = list.stream().count();
  • 2.reduce()-将流中所有的元素合并为一个元素,可用于累加求和,求乘积等等
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer reduce = list.stream().reduce((integer, integer2) -> integer + integer2).get();
  • 3.forEach()-遍历流中的所有元素
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
list.stream().forEach(System.out::println);
  • 4.max()-求出流中元素的最大值
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer max = list.stream().max((s1, s2) -> s1 - s2).get();
  • 5.min()-求出流中元素的最小值
 List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer min = list.stream().max((o1, o2) -> o2 - o1).get();
  • 6.anyMaych()/allMatch()/noneMatch()--匹配元素中的值,返回boolean类型
    List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
boolean b = list.stream().noneMatch((x) -> x.intValue() == 1);
boolean b = list.stream().allMatch((x) -> x.intValue() == 1);
boolean b = list.stream().anyMatch((x) -> x.intValue() == 1);
  • 7.collect()--收集流中的元素通过Collectors这个工具类处理
    List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
//求平均数
Double average= list.stream().collect(Collectors.averagingInt(x -> x.intValue()));
//求分组
Double average= list.stream().collect(Collectors.groupinngby(x -> x.intValue()));
//收集成一个List
List<Integer> collect = list.stream().sorted((o1, o2) -> o1 - o2).collect(Collectors.toList());
  • 8.summerizing() summerizing中封装了很多计算的方法,例如 求和,求平均数等等
    Double sum_= list.stream().collect(Collectors.summarizingInt(value -> value.intValue())).getAve

【JDK8】Java8 Stream流API常用操作的更多相关文章

  1. Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  2. 【转】Java8 Stream 流详解

      当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...

  3. Java8——Stream流式操作的一点小总结

    我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...

  4. Java8 Stream流方法

    流是Java API的新成员,它允许以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,可以把它们看成遍历数据集的高级迭代器.此外,流还可以透明地并行处理,无需写任何多 ...

  5. Java8 Stream流

    第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...

  6. Jdk8中Stream流的使用,让你脱离for循环

    学习要求: 知道一点儿函数式接口和Lambda表达式的基础知识,有利于更好的学习. 1.先体验一下Stream的好处 需求:给你一个ArrayList用来保存学生的成绩,让你打印出其中大于60的成绩. ...

  7. Java9系列第6篇-Stream流API的增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  8. Stream流的这些操作,你得知道,对你工作有很大帮助

    Stream流 Stream(流)是一个来自数据源的元素队列并支持聚合操作: 元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而 是按需计算. 数据源 流的来源. 可以是 ...

  9. 关于Java8 Stream流的利与弊 Java初学者,大神勿喷

    题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...

随机推荐

  1. 2020年Python最新面试题(一):Python基础

    转: 2020年Python最新面试题(一):Python基础 目录 1. 什么是 Python?使用 Python 有什么好处? 2. Python中常用的关键字有哪些? 3. Python 2.x ...

  2. Omega System Trading and Development Club内部分享策略Easylanguage源码 (第二期)

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 我们曾经在前文(链接),为大家分享我们精心整理的私货:"System Trading and ...

  3. LeetCode-重建二叉树(前序遍历+中序遍历)

    重建二叉树 LeetCode-105 首次需要知道前序遍历和中序遍历的性质. 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建. 本题的难点 ...

  4. 用java输出"Hello,World!"

    Hello,World! 一般步骤 随便新建一个文件夹,存放代码 新建一个java文件 新建.txt文档 文件后缀名改为.java Hello.java [注意]系统可能没有显示后缀名,我们需要手动打 ...

  5. hibernate中关系映射的配置问题

    部门和员工属于一对多的关系 员工的账户属于一对一关系 账户和权限属于多对多关系 department.hbm.xml 1 <hibernate-mapping> 2 <class n ...

  6. springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术

    知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...

  7. SqlServer存储过程的创建与使用

    什么是存储过程? T-SQL中的存储过程,非常类似于net语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句. 这样就可以提高存储过程的性能. ...

  8. JAVA题目:小芳的妈妈每天给她2.5元,她都会存起来,但是,每当这一天是存钱的第五题或者5的倍数的话,她都会去用掉6块钱。 问:至少经过多少天可以存到100块?

    1 /*题目:小芳的妈妈每天给她2.5元,她都会存起来, 2 但是,每当这一天是存钱的第五题或者5的倍数的话, 3 她都会去用掉6块钱. 4 问:至少经过多少天可以存到100块? 5 */ 6 /*分 ...

  9. Java例题_39 判断奇偶后分数累加

    1 /*39 [程序 39 分数累加] 2 题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数 3 1/1+1/3+...+1/n 4 ...

  10. BST(二叉搜索树)的基本操作

    BST(二叉搜索树) 首先,我们定义树的数据结构如下: public class TreeNode { int val; TreeNode left; TreeNode right; public T ...