java8 -- Stream

java8 Stream API java stream Java 8 java.util.stream Stream API的中间操作有filter、map、distinct、sorted、skip、limit、peek、mapToLong、mapToInt、mapToDouble、flatMap等 Stream API的终端操作有collect、max、min、count、allMatch、anyMatch、noneMatch、findFirst、findAny、forEach、toArray、reduce等。 阅读详情

java8 Stream API和I/O流是不一样的,它是操作集合元素的API,专注于对集合对象进行各种非常便利、高效的聚合操作

  操作的时候,会把集合转成Stream,在stream中对集合进行过滤(filter),遍历操作(map),排序(sorted)等操作

学习 stream,最好把Lambda 和方法引用学习下;

自己只是根据ibm 社区 练习了 一下

代码体现:

package com.xiaodu.java8Stream;

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.concurrent.SynchronousQueue;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import org.junit.Test;

/**
 * 测试java8 Stream
 *   使用Stream 对集合进行操作
 *      使用stream会大量使用lambda 和方法引用
 *
 */
public class TestJava8Stream {
	
	
	/**
	 * 使用forEach 遍历
	 * 	forEach 是terminal 操作,也就是流的末尾操作,操作完就关闭流了 ,所以输出后不能进行其他操作了
	 */
	@Test
	public void TestStreamForEach() {
//		创建集合
		List<String> list = Arrays.asList("a","b","c","d","ef");
//		                                备注:(System.out::print) 是实例方法引用
		list.stream().forEach(System.out::print);
		/*
		 * 使用peek 遍历输出 peek是intermediate 操作,是在流中间片段进行操作的,不会涉及到关流,
		 * 所以还能再流中,对元素进行操作
		 */
		List<String> collect =
				 list.stream().peek(System.out::println)
					 .map(l -> l+l).collect(Collectors.toList());
		System.out.println(collect);
		
	}
	
	
	
	/**
	 * 使用map 遍历元素 对每个元素进行操作
	 */
	@Test
	public void TestStreamMap() {
//		创建集合
		List<String> list = Arrays.asList("aaa","bbb","ccc","dd","ef");
//		截取字符串
		List<String> collect = list.stream().map(a -> a.substring(0, 2)).collect(Collectors.toList());
		System.out.println(collect); // [aa, bb, cc, dd, ef]
//		转换为大写
		List<String> collect2 = list.stream().map(a -> a.toUpperCase()).collect(Collectors.toList());
		System.out.println(collect2);// [AAA, BBB, CCC, DD, EF]
//		 使用flatMap 对多个集合进行操作
		List<Integer> collect3 = 
				Stream.of(Arrays.asList(1,2,3),Arrays.asList(7,8,9))
				.flatMap(a -> a.stream()).collect(Collectors.toList());
		System.out.println(collect3);
		
	}
	
	/**
	 * 使用filter  进行集合的过滤
	 */
	@Test
	public void TestStreamFilter() {
		
		List<Integer> list = Arrays.asList(1,2,5,4,7,6);
		
//		求偶
		List<Integer> collect = list.stream().filter(a -> a%2==0).collect(Collectors.toList());
		System.out.println(collect); //[2, 4, 6]
//		求大于3 的值
		List<Integer> collect2 = list.stream().filter(a -> a>3).collect(Collectors.toList());
		System.out.println(collect2);//[5, 4, 7, 6]
		
//		
		List<String> strs = Arrays.asList("aaa","bbb","ccc","dd","ef");
//		获取指定字符串长度的值
		List<String> collect3 = strs.stream().filter(str -> str.length()>2).collect(Collectors.toList());
		System.out.println(collect3); // [aaa, bbb, ccc]
		
	}
	
	/**
	 * 聚合操作
	 */
	@Test
	public void TestStreamAggregation() {
		
		List<Integer> list = Arrays.asList(1,2,5,4,7,6);
		IntSummaryStatistics intStream = 
				list.stream().mapToInt(l -> l).summaryStatistics();
		System.out.println("集合 求和 = " +intStream.getSum());
		System.out.println("集合平均数= " + intStream.getAverage());
		System.out.println("集合元素个数= " + intStream.getCount());
		System.out.println("集合最大值= " + intStream.getMax());
		System.out.println("集合最小值= " + intStream.getMin());
		
//		排序
		List<Integer> sort = list.stream().sorted().collect(Collectors.toList());
		System.out.println(sort);  //[1, 2, 4, 5, 6, 7]
//		倒序
		List<Integer> desc = list.stream().sorted((a,b) -> -1).collect(Collectors.toList());
		System.out.println(desc);
		
	}
	
	/**
	 * limit  skip  distinct
	 */
	@Test
	public void TestStreamLimit() {
		List<Integer> list = Arrays.asList(1,2,5,4,7,6);
//		获取下坐标小于3 的值
		List<Integer> collect = list.stream().limit(3).collect(Collectors.toList());
		System.out.println(collect);  //[1, 2, 5]
//		获取下坐标大于等于4的值
		List<Integer> collect2 = list.stream().skip(4).collect(Collectors.toList());
		System.out.println(collect2);//[7, 6]
//		去重
		List<String> strs = Arrays.asList("e","c","c","","","a","a");
		List<String> collect3 = strs.stream().sorted().distinct().collect(Collectors.toList());
		System.out.println(collect3); //[, a, c, e]
		
		
	}
	
	
	/**
	 * reduce  归纳
	 */
	@Test
	public void TestStreamReduce() {
		
		List<Integer> list = Arrays.asList(1,2,5,4,7,6,-2);
//		求和
		System.out.println(list.stream().reduce(Integer::sum)); 
//		求最大值
		System.out.println(list.stream().reduce(Integer::max));
//		求最小值
		System.out.println(list.stream().reduce(Integer::min));
		
	}
	
	
	/**
	 * Match
	 * 	  -anyMatch  有一个匹配就返回true 
	 *    -allMatch  全部匹配才返回true
	 *    -noneMatch 全部不匹配返回true
	 */
	@Test
	public void TestStreamMatch() {
		
		List<String> list = Arrays.asList("小明","小红","天天","12345");
//		集合中是否有一个叫天天的
		boolean anyMatch = list.stream().anyMatch(str -> str.equals("天天"));
		System.out.println(anyMatch); //true
//		集合长度大于5的
		System.out.println(list.stream().allMatch(str -> str.length()>5)); // false
//		判断集合中是否有""
		System.out.println(list.stream().noneMatch(str -> str.length()==6));
		
	}
	
	/**
	 * iterate
	 *    注意iterate 必须结合limit 使用 
	 */
	@Test
	public void TestStreamIterate() {
//		获取等差 集合
		List<Integer> collect = Stream.iterate(0, i -> i+2).limit(5).collect(Collectors.toList());
		System.out.println(collect);//[0, 2, 4, 6, 8]
		
	}
}

 

imb链接

Streams 的背景,以及 Java 8 中的使用详解:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

Hyperledger Fabric 网络搭建详解 写在前面:博主也是因为一些原因刚刚入坑区块链,我认为在我们入门新技术的时候,入门总是最困难的部分,只要入门了,后面学习起来就会越来越轻松,在网上找了很多文章,我觉得大多条理不是很清楚。本文章会详细介绍fabric(v1.0)环境部署,以及在搭建过程我遇到一些问题及解决方案,希望可以帮助到你们。 博主环境机器:VMware15 Ubuntu16.04 fabric(v1.0)环境部署一、必备软件安装1.ubuntu环境安装2.Go语言3.Docker安装4. Docker-Compose 安装二、Fa. 阅读详情

相关推荐

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1866

计算集合平均数

,冷 a = {54,63,77,90,35,100,73} #定义集合 b = {87,54,90,33,78,56,98} print(max(a),min(a)) #求最大值,最小值 print(max(b),min(b)) print(a|b) #求集合交集 a.discard(max(a));a.discard(min(a)) #删除集合a中的最大值和最小值 print(a) b.discard(max(b));b.

weixin_45457085的博客 2233

指标异常检测和诊断

贡献度,即用定量衡量的方式来说明:一个指标YYY的异动△Y△Y△Y,具体是由其中哪些成分XiX_iXi​带来了多少异动△Yi△Y_i△Yi​?

qq_43349542的博客 3163

Hutool集合工具类中分组方法的深度解析与正确使用

在Java开发中,集合操作是日常工作中不可或缺的一部分。Hutool作为一个强大的Java工具库,提供了丰富的集合操作工具类CollUtil。其中分组方法group(collection, hash)的设计理念和使用方式值得开发者深入理解。 ## 方法设计原理 CollUtil.group(collection, hash)方法本质上是一个基于哈希分片算法的实现。与常见的按字段值分组不同,这个...

gitblog_01407的博客 463

Java写一条吃满屏幕的贪吃蛇(A*自动寻路算法和一些简单的策略) 二

上一篇文章介绍了一条贪吃蛇的简单实现,这一篇介绍贪吃蛇的自动寻路算法 ,说是自动寻路其实也就是一种遍历地图的算法,如果玩过游戏肯定知道游戏里面一般会有自动寻路功能,贪吃蛇的自动寻路算法也就是实现这个功能。下面慢慢介绍这种算法吧。    最开始,我没有在网上找资料的时候,我对于设计寻路算法的看法是遍历整个地图,将障碍物做上标记,然后找一条能够到达目的地的线路就可以了。所以最开始我用了特别暴力的方式来...

Sober_yang的博客 3631

从 SAP GUI 走向 SAP Fiori:一套面向 SAP S/4HANA 的用户迁移实战方法论

SAP S/4HANA转型中,用户从SAP GUI迁移到Fiori的难点在于业务价值的重构而非简单的界面替换。Fiori的核心价值在于角色化、实时洞察和智能决策,而非完全替代GUI。成功迁移需分阶段推进:先展示关键角色的价值,建立统一入口,再逐步提高Fiori占比。让用户参与设计比后期培训更重要,需通过具体场景(如采购优先级管理)展示效率提升。迁移策略应平衡新旧界面优势,让Fiori成为业务价值触达的主要方式,而非强制替换。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

Java8 Stream针对List先分组再求和、最大值、最小值、平均值等

解题思路:JAVA8使用stream()根据类型对List进行分组统计。 核心功能代码片段: //分组求和 Map<String, LongSummaryStatistics> collect = list.stream().collect( Collectors.groupingBy(Fruit::getType, Collectors.summarizingLong(Fruit::getT

zhouzhiwengang的专栏 1万+

游戏大厂状态同步与帧同步技术全解析——让虚拟世界万物协同的“时间齿轮”

本文深入解析了大厂游戏开发中的两种核心同步技术:状态同步和帧同步。状态同步适合大型MMO和FPS游戏,由服务端计算并广播世界状态;帧同步则通过统一操作输入实现MOBA和RTS游戏的绝对公平。文章详细比较了两者的差异、适用场景和底层实现原理,并揭秘了《王者荣耀》《PUBG》等热门游戏的同步机制。同时探讨了本地预测、延迟补偿、防作弊等关键技术,以及未来AI和云游戏带来的同步新挑战,为开发者提供了全面的技术参考和实践指南。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 916

求数组均值

double mean = StatUtils.mean(doubleArray); double average = Arrays.stream(array).average().orElse(Double.NaN);

programmeruse的博客 785

61、增益调度控制器:原理、建模与调优

本文详细介绍了增益调度控制器的原理、建模方法和调优流程。增益调度是一种针对非线性系统的控制策略,通过在不同工作点使用不同的线性控制器实现全局控制。文章涵盖了在Simulink中使用Control System Toolbox模块建模的具体步骤,以及如何利用systune进行增益调度表的调优。同时,还讨论了实际应用中的注意事项、典型案例(如化学反应器和飞机控制),并与其它控制方法进行了对比。最后,文章展望了增益调度控制器的未来发展趋势,包括与人工智能的结合、多目标优化调优以及实时调优能力的提升。

rgv234567的博客 186

Python 爬虫实战:在丁香医生抓取健康科普文章阅读量,普及健康知识

requests:用于发送 HTTP 请求,获取网页内容。或 lxml:用于解析 HTML 页面,提取目标数据。pandas:用于数据清洗和分析。matplotlib和seaborn:用于数据可视化。通过本项目,我们实现了以下目标:使用 Python 爬虫抓取丁香医生的健康科普文章阅读量。对数据进行清洗和分析,找出热门文章。通过可视化展示数据,并普及健康知识。

u014481728的博客 1566

Hutool 数字工具-NumberUtil使用(加减乘除,保留小数,格式化数字,是否为数字,随机数,整数列表,阶乘,平方根,最大公约数和最小公倍数,进制转换,比较大小,去除多余的0)

数字工具针对数学运算做工具性封装。 1加减乘除 //针对数字类型做加法 NumberUtil.add(1,2);//3 // 针对数字类型做减法 NumberUtil.sub(1,1);//0 //针对数字类型做乘法 NumberUtil.mul(1,3);//3 //针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。 NumberUtil.d.

旭东怪的博客 6万+

[PCIe5.0] 5.3.1.4.2 D3Cold State

主电源(Vcc)完全断开,仅保留极少量辅助电源(Vaux)用于维持基本唤醒功能设备功能完全关闭,所有寄存器状态丢失(除非有特殊存储)需要完全重新初始化才能恢复工作比D3Hot状态功耗更低,但唤醒延迟更长。

系统固件工程师 452

java8 stream index_Java8 Stream基本使用

1. 什么是StreamStream是一个数据处理接口,本身不存储任何数据。大概有20多个方法,每个都很好用,并且含有函数式编程里的filter,map,reduce方法。Stream的数据有三个来源:Collection, Array或者根据需要生成。2. 创建Stream在Java8中,添加了许多能够产生Stream的方法,如Pattern类中的splitAsStream方法,下面是三种典型常...

weixin_36131782的博客 2643

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于java8的stream循环

JAVA8stream循环非常强大 首先,相对于传统的循环,java8的循环做了升级,而且代码更加简洁。 举例: List list = orgEvaluateItemRepository.findAll(userId); 现有一个list对象集合(里面有name,age属性等)。 1.//现将这个list对象集合转化成属性是name的值的集合 List<String> names= ...

AlphaBoss的博客 2783

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java8-Stream

概述 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行...

记录日常的点点滴滴 1285

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java8 map stream_怎么在java 8的map中使用stream

怎么在java 8的map中使用stream简介Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用Stream呢?基本概念Map有key,value还有表示key,value整体的Entry。创建一个Map:Map someMap = new HashMap<>();获取Map的entryS...

weixin_27918373的博客 2419

Java8 Stream

Java8 Functional Interface 1 函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 1.1 函数式接口可以被隐式转换为lambda表达式; 1.2 函数式接口可以现有的函数友好地支持 lambda; 1.3 确保函数式接口符合语法,可以添加@FunctionalInterface注...

Weison 756

关于Java8 Stream

Java8 Stream的总结 一、Stream的特性 Stream是Java 8新增的接口,Stream可以认为是一个高级版本的Iterator。它代表着数据流,流中的数据元素的数量可以是有限的,也可以是无限的。 Stream和Iterator的差别: 无储存:Stream是基于数据源的对象,它本身不储存数据元素,而是通过管道将数据源的元素传递给操作。 函数式编程:对stream的任何修改都不...

damokelisijian866的博客 497

Java8 stream

Java8 stream1.集合接口有两种方法生成流Stream2.forEach3.map4.filter5.limit6.sorted7.parallel8.Collectors9.完整实例 java 8 API添加了一个新的抽象叫流Stream,可以用一种声明的方式处理数据。 stream是使用一种类似用sql从数据库查询数据的方式来提供对java集合运算的抽象,这种风格是将要处理的元素集合...

qq_39736671的博客 317

Java8 Stream之Collectors

Collectors 是 Java 8 加入的操作类,位于 java.util.stream 包下。它会根据不同的策略将元素收集归纳起来,比如最简单常用的是将元素装入Map、Set、List等可变容器中

借物小人的博客 2049

Java8中的Stream详解

目录 一.什么是Stream 1.Stream的特征 2.Stream的原理 3.Stream和Collections的区别 4.Stream的操作 5.不使用Stream和使用Stream对比  二.常见应用场景 1.生成流  2.forEach 3.map 4.filter 5.limit 6.sorted 7.Collectors 8.统计 一.什么是Stre...

lcgoing的博客 1044

java8 退出stream_Java8 Stream 已经被操作或关闭

引言在 java8 中,Stream 不能被重用,一旦它被使用或使用,流将被关闭。1. 流关闭查看下面的示例,它将抛出一个 IllegalStateException,表示“ stream is closed”。public static void main(String[] args) {String[] array = {"a", "b", "c", "d", "e"};Stream stre...

weixin_39789499的博客 743

Java 8 Stream

Stream这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。数据源流的来源。

难得糊涂 733

java8 Stream详解

Stream是什么 在探讨探究stream的实现原理和动手实现之前,我们先要体会stream流计算的独特之处。   举个例子: 有一个List<Person>列表,我们需要获得年龄为70岁的前10个Person的姓名。 过程式的解决方案:   稍加思考,我们很快就写出了一个过程式的解决方案(伪代码): List<Person> personList = from...

lm324114的专栏 1090
上一篇: java 字节码分析工具 jclasslib 包含idea安装jclasslib插件
下一篇: springboot应用篇(一)简单整合web组件 和配置使用jsp
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值