StreamJava 8新增的接口,Stream可以认为是一个高级版本的 Iterator。 废话不多说直接上代码

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream; @SpringBootTest
class DemoApplicationTests { /*
1.filter:用于根据指定条件过滤元素.它接收一个条件作为参数, 只保留满足条件的元素, 并生成一个新的Stream
*/
@Test
void filterTest() {
List<String> tempList = Arrays.asList("初一", "初二", "初三", "初四");
List<String> resList = tempList.stream()
.filter(s -> s.contains("二"))
.collect(Collectors.toList());
System.out.println(resList.toString());
} /*
2.map:用于对每个元素执行映射操作, 将元素转换成另一种类型.它接收一个Function(映射函数)作为参数,
对每个元素应用该映射函数, 并生成一个新的Stream.
*/
@Test
void mapTest() {
List<String> tempList = Arrays.asList("初一", "初二", "初三", "初四");
List<String> resList = tempList.stream()
.map(s -> "今天: " + s)
.collect(Collectors.toList());
System.out.println(resList.toString());
} /*
3.sorted():用于对Stream中的元素进行排序,默认按照自然顺序进行排序。也可以传入自定义的Comparator来指定排序规则。
*/
@Test
void sortedTest() {
List<Integer> numList = Arrays.asList(10, 20, 18, 300, 30, 2);
// ① 默认排序
List<Integer> orderList = numList.stream()
.sorted()
.collect(Collectors.toList());
System.out.printf("① 默认排序: %s%n", orderList);
// ② 自定义排序
List<Integer> orderDescList = numList.stream()
.sorted((x, y) -> {
return y.compareTo(x);
})
.collect(Collectors.toList());
System.out.printf("② 自定义排序: %s%n", orderDescList);
} /*
4.distinct():用于去除 Stream 中重复的元素,确保最终的 Stream 中每个元素都是唯一的。
*/
@Test
void distinctTest() {
List<Integer> numList = Arrays.asList(1,1,1,1,2,3,2,2);
List<Integer> distinctList = numList.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctList);
} /*
5.limit(long n):用于限制Stream的大小,返回一个最大包含前n个元素的新Stream。
*/
@Test
void limitTest() {
List<Integer> numList = Arrays.asList(1,2,3,4,5,6,7,8);
List<Integer> limitList = numList.stream()
.limit(4)
.collect(Collectors.toList());
System.out.println(limitList);
} /*
6.skip(long n):用于跳过Stream中的前n个元素,返回一个丢弃了前n个元素后剩余元素的新Stream。
*/
@Test
void skipTest() {
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
List<Integer> skipList = numList.stream()
.skip(numList.size() - 2)
.collect(Collectors.toList());
System.out.println(skipList);
} /*
7.forEach(Consumer):对Stream中的每个元素执行指定的操作,接收一个Consumer(消费者函数)作为参数。它通常用于对Stream中的元素进行输出或执行某些操作,但不会返回任何结果。
*/
@Test
void forEachTest() {
// 给公司工资普涨 500
List<Integer> salaryList = Arrays.asList(12000, 20000, 30000, 4000);
salaryList.stream()
.map(s -> s + 500)
.forEach(s -> {
System.out.println("--工资普涨后:" + s);
});
} /*
8.collect(Collector):用于将Stream中的元素收集到一个容器中,接收一个Collector(收集器)作为参数。它允许你在Stream中执行各种集合操作,
例如将元素收集到List、Set、Map等容器中。 如下代码的含义是创建一个人员集合,通过 stream() 转换为 Stream 流,使用 collect() 方法把元素归集,
利用 Collectors.toMap() 收集器转换为 Map 后,内部接收会遍历每个元素,Collectors.toMap(User::getName, User::getSalary)是简写,
详细的写法如下:Collectors.toMap(s -> s.getName(), s -> s.getSalary())
*/
@Test
void collectTest() {
List<User> userList = Arrays.asList(new User("张三", 2000.5),
new User("李斯", 11000.5),
new User("王二", 12000.5),
new User("张六", 32000.5),
new User("赵公子", 1000000.0));
Map<String, Double> userSalaryMap = userList.stream()
.collect(Collectors.toMap(User::getName, User::getSalary));
userSalaryMap.forEach((k, v) -> {
System.out.printf("姓名:%s,工资:%.2f%n", k, v);
});
} /*
9.anyMatch(Predicate) / allMatch(Predicate) / noneMatch(Predicate)
Stream 类的 anyMatch(), allMatch(), 和 noneMatch() 是用于检查流中元素是否满足特定条件的终端操作。
它们返回一个布尔值,表示流中的元素是否满足指定的条件。这些方法在遇到满足条件的元素后可能会提前终止流的处理。
anyMatch检查是否有任意元素满足条件,allMatch检查是否所有元素都满足条件,noneMatch检查是否没有元素满足条件。
*/
@Test
void MatchTest() {
// 示例整数流
Stream<Integer> integerStream = Stream.of(1, 5, 3, 8, 2); // 使用anyMatch()检查是否存在元素大于5
boolean anyGreaterThan5 = integerStream.anyMatch(num -> num > 5);
System.out.println("是否存在元素大于 5 ?" + anyGreaterThan5); // 重新创建一个整数流,因为流已被消耗
Stream<Integer> newIntegerStream = Stream.of(1, 5, 3, 8, 2); // 使用allMatch()检查是否所有元素都小于10
boolean allLessThan10 = newIntegerStream.allMatch(num -> num < 10);
System.out.println("所有元素都小于10 ? " + allLessThan10); // 重新创建一个整数流,因为流已被消耗
Stream<Integer> newestIntegerStream = Stream.of(1, 5, 3, 8, 2); // 使用noneMatch()检查是否没有元素等于10
boolean noneEqualTo10 = newestIntegerStream.noneMatch(num -> num == 10);
System.out.println("是否没有元素等于 10 ? " + noneEqualTo10);
} /*
10.findFirst() / findAny()
Stream 类的 findFirst() 和 findAny()
方法用于在流中查找元素的终端操作。它们都返回一个 Optional 对象,表示找到的元素或元素的可能性。
*/
@Test
void findTest() {
// 示例整数流
Stream<Integer> integerStream = Stream.of(1, 5, 3, 8, 2); // 使用findFirst()找到第一个元素
Optional<Integer> firstElementOptional = integerStream.findFirst();
System.out.println("发现第一个元素: " + firstElementOptional.get()); //isPresent() 判断流是否为null
if (firstElementOptional.isPresent()) {
System.out.println("发现第一个元素: " + firstElementOptional.get());
} else {
System.out.println("流为空!");
} // 使用findAny()找到任意一个元素
Stream<Integer> stream = Stream.of(1, 2, 3);
Optional<Integer> any = stream.findAny();
System.out.println("找到任意一个元素: " +any.get());
// 资料说:可能输出 1、2 或 3 但实际操作每次都输出1 } }
package com.example.demo;

public class User {
private String name;
private Double salary; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Double getSalary() {
return salary;
} public void setSalary(Double salary) {
this.salary = salary;
} public User(String name, Double salary) {
this.name = name;
this.salary = salary;
}
}

Java 8 中Stream用法的更多相关文章

  1. 详解Java 8中Stream类型的“懒”加载

    在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...

  2. 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  3. 【Java学习笔记之二十】final关键字在Java继承中的用法小结

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  4. Java 8中Stream API学习笔记

    1)函数式编程的优势和劣势分别是什么?优势:①不可变性 ②并行操作 ③执行顺序更灵活 ④代码更加简洁纯粹的函数式编程,变量具有不可变性,同一个参数不会在不同场景下得出不同的结果,因此大大增强了系统的稳 ...

  5. 【Java学习笔记之二十一】抽象类在Java继承中的用法小结

    一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...

  6. 【Java学习笔记之十九】super在Java继承中的用法小结

    1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一 ...

  7. Java 8中用法优雅的Stream,性能也"优雅"吗?

    之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码. 那么,Stream API的性能到 ...

  8. Java 8 Lambda 表达式及 Stream 在集合中的用法

    简介 虽然 Java 8 已经发布有一段时间了,但是关于 Java 8 中的 Lambda 表达式最近才开始系统的学习,刚开始就被 Stream 的各种骚操作深深的吸引住了,简直漂亮的不像 Java. ...

  9. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  10. Java 8中处理集合的优雅姿势——Stream

    在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增.删.改.查.聚合.统计.过滤等操作.相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便 ...

随机推荐

  1. Python3学习--正则表达式

    import rer = re.match("Chen\d+","Chen123ronghua123")r = re.match(".+", ...

  2. Spring Cloud Sleuth:分布式请求链路跟踪

    Spring Cloud Sleuth:分布式请求链路跟踪 SpringCloud学习教程 SpringCloud Spring Cloud Sleuth 是分布式系统中跟踪服务间调用的工具,它可以直 ...

  3. nginx重新整理——————http请求的11个阶段中的precontent阶段[十六]

    前言 简单介绍一下precontent阶段. 正文 介绍一下这个阶段的几个模块. ngx_http_try_files_module 模块. syntax : tryfiles file... uri ...

  4. vscode 编辑python 如何格式化

    正文 今天同事说我的代码的格式不对,其实就是几个空格忘了空4格了,但是代码可运行. 那么如何帮我们检测呢? pip install yapf 然后打开setting: 输入:ython.formatt ...

  5. WPF随笔收录-实时绘制心率曲线

    一.前言 在自己的项目中,涉及到实时心率曲线的绘制,项目上的曲线绘制,一般很难找到能直接用的第三方库,而且有些还是定制化的功能,所以还是自己绘制比较方便.很多人一听到自己画就害怕,感觉很难,今天就分享 ...

  6. 推荐一个计算Grad-CAM的Python库

    前言 类激活图CAM(class activation mapping)用于可视化深度学习模型的感兴趣区域,增加了神经网络的可解释性.现在常用Grad-CAM可视化,Grad-CAM基于梯度计算激活图 ...

  7. 客户端单元测试实践——C++篇

    简介: 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题.提高性能,我们采用了将核心代码C++化的策略.由于团队项目偏底层,测试同学难以完全覆 ...

  8. Apsara Stack 同行者专刊 | 怀同行之心,筑信任之基,践数智之行

    简介: 政企云平台处在怎样的历史阶段?数智创新的同行者们面临着怎样的挑战与机遇?在时代巨幕下,政企期待云厂商扮演怎样的角色?阿里云智能研究员.混合云平台总经理刘国华认为,云厂商不仅需要有定力与实力,也 ...

  9. 压测场景下的 TIME_WAIT 处理

    简介: 压测场景下的 TIME_WAIT 处理 1. 序 某专有云项目具备压测场景,在Windows的压测机上用 LoadRunner 进行业务的压力测试,压测运行一段时间后出现大量端口无法分配的报错 ...

  10. 日志服务Dashboard加速

    简介: 阿里云日志服务致力于为用户提供统一的可观测性平台,同时支持日志.时序以及Trace数据的查询存储.用户可以基于收集到的各类数据构建统一的监控以及业务大盘,从而及时发现系统异常,感知业务趋势.但 ...