Java8新特性(1)—— Stream集合运算流入门学习
废话,写在前面
- 好久没写博客了,懒了,以后自觉写写博客,每周两三篇吧!
- 简单记录自己的学习经历,算是对自己的一点小小的督促!
- 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: Java 8中处理集合的优雅姿势——Stream
- 链接2:
- ALiBaBaJavaCodingGuideLines有话说 :
- 无
1.主题
package com.jdk8.newFeatures;
import org.junit.Test;
import javax.swing.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 测试Stream 的集合流
*/
public class StreamTest01 {
@Test
public void test(){
// 1-1准备初始的数据流,通过已有的集合来创建流 无存储。
//Stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等
List<String> strings = new ArrayList<>(Arrays.asList("111","222","333"));
// 1-2创建Stream
Stream stream = strings.stream();
stream.forEach(System.out::println);
// stream.forEach(System.out::println); // 不加注释,会对stream操作两次,出现java.lang.IllegalStateException: stream has already been operated upon or closed
// 1-3 或者通过已有的数据来创建Stream创建流,可以使用Stream类提供的Stream.of()方法,直接返回一个由指定元素组成的流。
Stream<String> streamxx = Stream.of("aaa","bbb","ccc");
streamxx.forEach(
i->System.out.println("(2)"+i)
);
//2-1 filter 过滤条件 中间操作
List<String> lists = Arrays.asList("AAA","","BBB","CCC");
lists.stream().filter(s -> s.length()>0).forEach(i -> System.out.println("filter后:"+i));
// 2-2 map映射 中间操作
List<Integer> numbers = Arrays.asList(11,2,3,14,14);
numbers.stream().map(i->i*i).forEach(i -> System.out.println("平方数后:"+i));
// 2-3 limit/skip limit ,返回 Stream 的前面 n 个元素;skip 则是扔掉前 n 个元素
System.out.println("执行limit后:");
numbers.stream().limit(4).forEach(System.out::println);
// 2-4 sorted 方法用于对流进行排序
System.out.println("排序后:");
numbers.stream().sorted().forEach(System.out::println);
// 2-5 distinct主要用来去重,以下代码片段使用 distinct 对元素进行去重
System.out.println("distinct 对元素进行去重: ");
numbers.stream().distinct().forEach(System.out::println);
// 3 Stream的最终操作 : 计算出流中元素的个数、将流装换成集合等。
//3-1 最终结果讨论 count用来统计流中的个数
System.out.println("count用来统计流中的元素个数: ");
System.out.println(numbers.stream().count());
//3-2 forEach 遍历单个子元素进行操作,ints()返回的是一个intStream()
new Random().ints().limit(4).forEach(System.out::println);
//3-3 collect 就是一个规约操作,可以接受各种做法作为参数,将流中的元素累计汇成集合框架中的一种,如List
List<String> string3 = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis");
string3 = string3.stream().filter(string -> string.startsWith("Hollis")).collect(Collectors.toList());
System.out.println("string3的collect后的测试是:"+string3);
}
}
测试结果
111
222
333
(2)aaa
(2)bbb
(2)ccc
filter后:AAA
filter后:BBB
filter后:CCC
平方数后:121
平方数后:4
平方数后:9
平方数后:196
平方数后:196
执行limit后:
11
2
3
14
排序后:
2
3
11
14
14
distinct 对元素进行去重:
11
2
3
14
count用来统计流中的元素个数:
5
1651256773
1647013782
-1530012352
1888788786
string3的collect后的测试是:[Hollis, HollisChuang, Hollis666, Hollis]
Java8新特性(1)—— Stream集合运算流入门学习的更多相关文章
- 乐字节-Java8新特性之Stream流(上)
上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...
- Java8 新特性之Stream API
1. Stream 概述 Stream 是Java8中处理集合的关键抽象概念,可以对集合执行非常复杂的查找,过滤和映射数据等操作; 使用 Stream API 对集合数据进行操作,就类似于使用 SQL ...
- 【Java8新特性】- Stream流
Java8新特性 - Stream流的应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- Java8新特性--流(Stream)
1.简介 Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们一起来学习引入的一个新特性- ...
- 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!
写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...
- Java8新特性之Stream
原文链接:http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验( ...
- 【Java8新特性】Stream(分类+案例)
一.Stream概述 什么是Stream? Stream是Java8引入的全新概念,它用来处理集合中的数据,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数 ...
- java8新特性五-Stream
继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. Java 8 A ...
- Java8 新特性 Lambda & Stream API
目录 Lambda & Stream API 1 Lambda表达式 1.1 为什么要使用lambda表达式 1.2 Lambda表达式语法 1.3 函数式接口 1.3.1 什么是函数式接口? ...
随机推荐
- 【Gamma阶段】第八次Scrum Meeting
冰多多团队-Gamma阶段第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 添加pytorch训练dict和ssh工具 ...
- suface 触控笔
触控笔直接就可以书写,顶部橡皮擦可用. 但如果要使用笔上的按键(如单击启动OneNote),必须要用蓝牙进行配对.笔使用一节AAAA电池(九号电池)供电. 连接方法: 准备好surface触控笔,并确 ...
- 【IntelliJ IDEA学习之一】IntelliJ IDEA安装激活、VM参数
版本:IntelliJIDEA2018.1.4 特点:比eclipse更耗内存 1.下载 官网下载专业版. 2.安装一直下一步即可. 3.配置文件修改 (1)VM参数 进入安装目录,进入bin目录下, ...
- ASP.NET Core WebApi基于JWT实现接口授权验证
一.ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再 ...
- [记录]mscorlib recursive resource lookup bug解决方法
[Content]Expression: [mscorlib recursive resource lookup bug]Description: Infinite recursion during ...
- 类的练习3——python编程从入门到实践
9-13 使用OrderedDict: 在练习6-4中,使用一个标准字典来表示词汇表.使用OrderedDict类来重写这个程序,并确认输出的顺序与在字典中添加的键值对的顺序一致. from coll ...
- c语言数据结构之线性表的顺序存储结构
线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...
- 【题解】Luogu P4284 [SHOI2014]概率充电器
原题传送门 我们知道,每个电器充电对充电电器数的贡献都是相等的1,所以若第\(i\)个电器有\(p_i\)的概率充电时 \[E=\sum_{i=1}^np_i\] 我们考虑如何求\(p_i\),根据树 ...
- 常用Java API之Scanner:功能与使用方法
Scanner 常用Java API之Scanner:功能与使用方法 Scanner类的功能:可以实现键盘输入数据到程序当中. 引用类型的一般使用步骤:(Scanner是引用类型的) 1.导包 imp ...
- java基本数据类型的变量
一.整型变量 短整型(short).整型(int)和长整型(long),它们都可以定义整型变量,但是由于分配的内存空间不同,所能表示的数据的长度也不同. 我们可以定义并初始化一个整型变量: int a ...