废话,写在前面

  • 好久没写博客了,懒了,以后自觉写写博客,每周两三篇吧!
  • 简单记录自己的学习经历,算是对自己的一点小小的督促!
  • Java8的新特性很多,比如流处理在工作中看到很多的地方都在用,是时候扔掉笨重的for循环了!节省40%-50%代码量!Come on!

如题 (总结要点)

  • Stream API只能被消费一次,后续重复使用已建立的流会报异常!所以stream流是线程安全的!

  • 比如执行“stream.forEach(System.out::println);stream.forEach(System.out::println);”连续两次,

  • 出现java.lang.IllegalStateException: stream has already been operated upon or closed。

  • 原文链接 :

借鉴学习文章列表

1.主题

  1. package com.jdk8.newFeatures;
  2. import org.junit.Test;
  3. import javax.swing.*;
  4. import java.lang.reflect.Array;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.List;
  8. import java.util.Random;
  9. import java.util.stream.Collectors;
  10. import java.util.stream.Stream;
  11. /**
  12. * 测试Stream 的集合流
  13. */
  14. public class StreamTest01 {
  15. @Test
  16. public void test(){
  17. // 1-1准备初始的数据流,通过已有的集合来创建流 无存储。
  18. //Stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等
  19. List<String> strings = new ArrayList<>(Arrays.asList("111","222","333"));
  20. // 1-2创建Stream
  21. Stream stream = strings.stream();
  22. stream.forEach(System.out::println);
  23. // stream.forEach(System.out::println); // 不加注释,会对stream操作两次,出现java.lang.IllegalStateException: stream has already been operated upon or closed
  24. // 1-3 或者通过已有的数据来创建Stream创建流,可以使用Stream类提供的Stream.of()方法,直接返回一个由指定元素组成的流。
  25. Stream<String> streamxx = Stream.of("aaa","bbb","ccc");
  26. streamxx.forEach(
  27. i->System.out.println("(2)"+i)
  28. );
  29. //2-1 filter 过滤条件 中间操作
  30. List<String> lists = Arrays.asList("AAA","","BBB","CCC");
  31. lists.stream().filter(s -> s.length()>0).forEach(i -> System.out.println("filter后:"+i));
  32. // 2-2 map映射 中间操作
  33. List<Integer> numbers = Arrays.asList(11,2,3,14,14);
  34. numbers.stream().map(i->i*i).forEach(i -> System.out.println("平方数后:"+i));
  35. // 2-3 limit/skip limit ,返回 Stream 的前面 n 个元素;skip 则是扔掉前 n 个元素
  36. System.out.println("执行limit后:");
  37. numbers.stream().limit(4).forEach(System.out::println);
  38. // 2-4 sorted 方法用于对流进行排序
  39. System.out.println("排序后:");
  40. numbers.stream().sorted().forEach(System.out::println);
  41. // 2-5 distinct主要用来去重,以下代码片段使用 distinct 对元素进行去重
  42. System.out.println("distinct 对元素进行去重: ");
  43. numbers.stream().distinct().forEach(System.out::println);
  44. // 3 Stream的最终操作 : 计算出流中元素的个数、将流装换成集合等。
  45. //3-1 最终结果讨论 count用来统计流中的个数
  46. System.out.println("count用来统计流中的元素个数: ");
  47. System.out.println(numbers.stream().count());
  48. //3-2 forEach 遍历单个子元素进行操作,ints()返回的是一个intStream()
  49. new Random().ints().limit(4).forEach(System.out::println);
  50. //3-3 collect 就是一个规约操作,可以接受各种做法作为参数,将流中的元素累计汇成集合框架中的一种,如List
  51. List<String> string3 = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis");
  52. string3 = string3.stream().filter(string -> string.startsWith("Hollis")).collect(Collectors.toList());
  53. System.out.println("string3的collect后的测试是:"+string3);
  54. }
  55. }

测试结果

  1. 111
  2. 222
  3. 333
  4. (2)aaa
  5. (2)bbb
  6. (2)ccc
  7. filter后:AAA
  8. filter后:BBB
  9. filter后:CCC
  10. 平方数后:121
  11. 平方数后:4
  12. 平方数后:9
  13. 平方数后:196
  14. 平方数后:196
  15. 执行limit后:
  16. 11
  17. 2
  18. 3
  19. 14
  20. 排序后:
  21. 2
  22. 3
  23. 11
  24. 14
  25. 14
  26. distinct 对元素进行去重:
  27. 11
  28. 2
  29. 3
  30. 14
  31. count用来统计流中的元素个数:
  32. 5
  33. 1651256773
  34. 1647013782
  35. -1530012352
  36. 1888788786
  37. string3collect后的测试是:[Hollis, HollisChuang, Hollis666, Hollis]

Java8新特性(1)—— Stream集合运算流入门学习的更多相关文章

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

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

  2. Java8 新特性之Stream API

    1. Stream 概述 Stream 是Java8中处理集合的关键抽象概念,可以对集合执行非常复杂的查找,过滤和映射数据等操作; 使用 Stream API 对集合数据进行操作,就类似于使用 SQL ...

  3. 【Java8新特性】- Stream流

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

  4. Java8新特性--流(Stream)

    1.简介      Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们一起来学习引入的一个新特性- ...

  5. 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!

    写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...

  6. Java8新特性之Stream

    原文链接:http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验( ...

  7. 【Java8新特性】Stream(分类+案例)

    一.Stream概述 什么是Stream? Stream是Java8引入的全新概念,它用来处理集合中的数据,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数 ...

  8. java8新特性五-Stream

    继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. Java 8 A ...

  9. Java8 新特性 Lambda & Stream API

    目录 Lambda & Stream API 1 Lambda表达式 1.1 为什么要使用lambda表达式 1.2 Lambda表达式语法 1.3 函数式接口 1.3.1 什么是函数式接口? ...

随机推荐

  1. 在ensp上通过FTP进行文件操作

    接下来的实验,我们使PC-1为用户端,需要访问FTP Server,不允许用户端上传到server. 在R1上员工不能上传文件到server,但是可以下载文件.同时R1也需要作为用户端从server下 ...

  2. Vim 入门教程

    Vim 入门教程 转载请保留以上信息 Vim 的教程相对比较零散,系统的教程比较少,我也阅读过不少教程,走过很 多弯路.借着 Vim-china 组织组建这一契机,整理下自己学习过的内容, 分享给大家 ...

  3. Scala Types 1

    在 Scala 中所有值都有一种对应的类型 单例类型 形式:value.type,返回类型 value / null 场景1:链式API调用时的类型指定 class Super { def m1(t: ...

  4. Grafana邮件报警

    一.概述 报警是Grafana的一项革命性功能,它让Grafana从一个数据可视化工具变成一个真正的任务监控工具.报警规则可以使用现有的图表控制面板设置,阈值可以通过拖拉右边的线控制,非常简单.Gra ...

  5. Java学习:线程间通信

    线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同重点:有效的利用资源 分析:需要那些类 1 资源类:包子类 设置包子的属性 包子的状态:有true 没有false 2 ...

  6. ML学习笔记之XGBoost实现对鸢尾花数据集分类预测

    import xgboost as xgb import numpy as np import pandas as pd from sklearn.model_selection import tra ...

  7. SQL Server中临时表是在什么schema下的(转载)

    Specifying schema for temporary tables 问: I'm used to seeing temporary tables created with just the ...

  8. Lombok简介、使用、工作原理、优缺点

    1.Lombok简介官方介绍 Project Lombok is a java library that automatically plugs into your editor and build ...

  9. pytest之mark功能

    pytest系列(一)中给大家介绍了pytest的特性,以及它的编写用例的简单至极. 那么在实际工作当中呢,我们要写的自动化用例会比较多,不会都放在一个py文件里. 如下图所示,我们编写的用例存放在不 ...

  10. 2019 滴滴java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了滴滴,入职一年时间了,也成为了面试官, ...