对stream的操作有

1.创建stream流

  • stream() − 为集合创建串行流。

  • parallelStream() − 为集合创建并行流。

String[] dd = { "a", "b", "c" };
        Arrays.stream(dd).forEach(System.out::print);// abc
        System.out.println();
        Stream.of(dd).forEach(System.out::print);// abc
        System.out.println();
        Arrays.asList(dd).stream().forEach(System.out::print);// abc
        System.out.println();
        Stream.iterate(0, x -> x + 1).limit(10).forEach(System.out::print);// 0123456789
        System.out.println();
        Stream.generate(() -> "x").limit(10).forEach(System.out::print);// xxxxxxxxxx

1.1List最常用的方式:

        List<String> list = new ArrayList<>();Stream<String> stream = list.stream();//返回一个新的元素流,对源对象不会造成影响

2.2Map最长的方式:

在Java中Map不能直接使用Stream,因为Map是一种键值对映射的数据结构,而stream流是用于处理集合元素的API,一般是对集合的List和set进行处理和操作,由于Map是键值对关系,它不能直接去循环,所以在循环Map必须要转换为entrySet()、keySet()和values()方法来获取Map中的键/值/键值对集合,通过转为KeySet()和EntrySet()和values()获取Stream流来对Map进行处理,常见的做法是:

  1. 将Map.Entry对象转换为Stream:map.entrySet().stream()
  2. 将Map中所有键转换为Stream:map.keySet().stream()
  3. 将Map中所有值转换为Stream:map.values().stream()

2.中间操作

主要包括以下几种:

  1. filter(Predicate<T> predicate):过滤出符合条件的元素并返回一个新的Stream对象。

  2. map(Function<T, R> mapper):将一个类型的流转换为另一个类型的流并返回一个新的Stream对象。

  3. flatMap(Function<T, Stream<R>> mapper):与map类似,但是可以将元素映射为流(而不是单个元素),最后将所有流合并成一个流,并返回一个新的Stream对象。(用自己的话说就是对象中还有对象就只用这个去循环)

  4. distinct():去重并返回一个新的Stream对象。

  5. sorted():排序并返回一个新的Stream对象。如果是对象,则要求其实现Comparable接口,或需要传入Comparator。

  6. peek(Consumer<T> action):对每个元素应用action函数,并返回一个新的Stream对象,适合于调试或日志输出等用途。(用自己的话说就是对流中的每个元素进行一定的操作比如+1,加上同样的名字)

  7. limit(long maxSize) 和 skip(long n):limit方法返回一个Stream对象,它限制了结果集的最大长度,并跳过复显式字段指定数量的数据。skip方法做的正好相反,是跳过前N个元素,截取从第N+1个元素至末尾的全部元素。

  8. takeWhile(Predicate<T> predicate) 和 dropWhile(Predicate<T> predicate):takeWhile方法获取从开头开始匹配predicate函数的元素,直到遇到不匹配为止;dropWhile方法则从开头忽略掉一部分符合valeus的数据(直到遇到不符合的片段),然后返回一个新的Stream对象。(用自己的话说就是takeWhile就是根据自己的条件进行匹配获取想要的数据,而dropWhile就是相反)

takeWhile()dropWhile() 方法与 Stream API 中的 filter()的区别:

   takeWhile()dropWhile() 方法与 Stream API 中的 filter() 方法都可以进行条件筛选和过滤,但它们之间存在以下几个区别:

  1. filter() 方法通过判断流中元素是否满足指定谓词来决定是否保留元素,而 takeWhile()dropWhile() 方法则根据条件从开头开始获取或丢弃元素直到遇到不符合该条件的第一个元素。

  2. filter() 方法是终止操作,并完整输出流中所有符合条件的元素。而 takeWhile()dropWhile() 方法都是中间操作,能够在流中挑选出满足条件的部分元素,在其后接其他中间/终止操作完成任务。

  3. takeWhile()dropWhile() 可以更灵活地截取、扩充原始流:当一些数据需要按照一定的规则处理时,takeWhile()dropWhile() 方法可以将复杂的判断交由用户自己实现。而 filter() 则关注于对单一维度的数据集合进行筛选。

3.终结操作

常见的终止操作包括:

  1. forEach():对流中的每个元素执行操作(可以再方法体中写逻辑)。
  2. toArray():将流中的元素转为一个数组。
  3. reduce():按照指定的运算逻辑返回计算结果(可以再方法体中写逻辑)。
  4. collect():将流中的元素收集到一个集合中(可以再方法体中写逻辑)。
  5. min() 和 max():返回流中最小和最大元素(可以再方法体中写逻辑)。
  6. count():返回流中元素的数量。
  7. anyMatch()allMatch() 和 noneMatch():判断流中是否有任何/全部/无元素符合指定的条件(可以再方法体中写逻辑)。
  8. findAny() 和 findFirst():查找并返回流中的任意一个或第一个元素(可以再方法体中写逻辑)。
  9. iterator():返回这个流的迭代器。

需要注意的是,终止操作都会导致流已关闭,不可进行更多的中间操作。因此必须谨慎选择终止操作,保证流被正确处理。同时,Stream 还支持类似于 sorted()distinct() 等比较相关的方法,虽然它们也可以作为中间操作调用,但实际上也仅有当前有限的数据段参与排序,直到终结操作调用而自然溢出为止。

常见的List转Map

List<User> userList = new ArrayList<>();userList.add(new User("Alice", 20));userList.add(new User("Bob", 25));userList.add(new User("Cathy", 30));Map<String, Integer> nameToAgeMap = userList.stream().collect(Collectors.toMap(User::getName, User::getAge));

Java的stream回顾相关推荐

  1. Java 8 Stream Api 中的 peek、map、foreach区别

    #1. 前言 我在Java8 Stream中讲述了 Java 8 Stream API 的一些内容.今天再看一下peek.map.foreach区别. 2. peek peek 操作接收的是一个 Co ...

  2. 《HEAD FIRST JAVA》第一次回顾和整理

    <HEAD FIRST JAVA>第一次回顾和整理 第一章 进入Java的世界(基本概念) 主要介绍了Java的工作原理,发展简史,程序结构和一些简单的语法.学过其他语言的人表示这章完全没 ...

  3. 牛逼哄洪的 Java 8 Stream,性能也牛逼么?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Java8的Stream API可以极大提高Java程序员的生产力 ...

  4. java8 group by_java8新特性Java 8 – Stream Collectors groupingBy 示例 - Java教程

    在这篇教程中,将向你展示如何使用Java 8 Stream的Collectors,来对一个List进行分组,计算个数,求和以及排序. 1. Group By, Count and Sort 1.1 对 ...

  5. 从Java 8中的java.util.stream.Stream检索列表

    本文翻译自:Retrieving a List from a java.util.stream.Stream in Java 8 I was playing around with Java 8 la ...

  6. Java 8 Stream Api 中的 skip 和 limit 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...

  7. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  8. Java 8 Stream Tutorial--转

    原文地址:http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ This example-driven tutori ...

  9. Java 8 - Stream实战

    文章目录 Pre 练习 基础数据 (1) 找出2011年发生的所有交易,并按交易额排序(从低到高) (2) 交易员都在哪些不同的城市工作过? (3) 查找所有来自于剑桥的交易员,并按姓名排序. (4) ...

最新文章

  1. MPASNET:用于视频场景中无监督深度人群分割的运动先验感知SIAMESE网络
  2. matlab绘制立体条形图
  3. node.js下载安装并配置WebStrom
  4. 【面试】 C++ 面试题笔记(不定期更新)
  5. 用ajax连接mysql_页面用ajax实现简单的连接数据库
  6. 前端笔记-使用JavaScript防止空表单提交
  7. linux中dump文件怎么生成,linux下设置core dump文件生成的方法
  8. 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
  9. 模块使用:time、datetime、calendar、sys、os、os.path、normcase和normapath、random、json、pickle...
  10. Fail - Fast机制
  11. ttshop是PHP开发的,商家应该如何选择商城系统?
  12. 怎么删除安卓手机里没用的文件夹,如何知道哪个有用哪些没用?
  13. OpenCV积分图函数:integral ()介绍
  14. Fiddler抓包一键生成代码
  15. 学习Hadoop需要哪些预备知识?Java是否必须会?
  16. SpringBoot使用Quartz定时器实现Email信息轰炸
  17. 罗格斯的计算机科学,清华大学计算机科学与技术系
  18. C语言初阶(18) | 数组详解
  19. 2010页游报告:开测222款31款停运
  20. 欧拉中的俯仰、横滚、偏航角

热门文章

  1. 看云笔记 | 适合大学生的云笔记软件
  2. python二进制反码_认识原码、反码、补码
  3. html获取ul的li,如何从html中提取一些li(在ol / ul标签下)标签/li
  4. OpenNI协议小结
  5. Centos6.5x64位Oracle12cRAC集群搭建
  6. JAVA看云判断天气_看云识天气:如何利用云层判断天气?
  7. 用二进制数表示从1到100
  8. 英语2020.12.22
  9. high-logic fontcreater的一种使用方法
  10. 京东青龙面板机器人搭建(零基础教程)