一段枯  
自认惊叹的桥段,终沦为老生常谈。

这篇文章只有一些比较初级的用法,以后会有补充。

jdk8中除了lambda,还有一个非常非常nb的新特性--Stream,ta实现了函数式数据处理,极大的提高了代码代码效率及并发效率,lambda只是是stream的基础

lambda:https://www.cnblogs.com/bfe0-ceb6/p/15344180.html

Optional: https://www.cnblogs.com/bfe0-ceb6/p/15352174.html

Stream概念: 用于做函数式数据处理(可以理解为现成的具特定功能的函数对数据进行处理),常用于处理集合中的数据

**流的操作

  数据源

  中间操作链: 每一个中间操作都会返回一个流,此时为惰性求值,不进行任何计算,只是定义了流的执行规则,并不会执行(提高效率)

  终端操作:执行中间操作的所有构建,返回结果

Stream 中间操作

方法返回值参数类型参数方法描述含义
filter Stream<T> Predicate T->boolean 筛选元素
distinct Stream<T> 无参   过滤重复元素
limit Stream<T> long   截短流
map Stream<R> Function T->R 映射流
flatMap Stream<R> Function T->Stream<R> 扁平化
sorted Stream<T> Comparator (T,T)->int 排序

Stream 终端操作

方法返回值参数类型参数方法描述含义
anyMatch boolean Predicate T->boolean 任意匹配
noneMatch boolean Predicate T->boolean 全不匹配
allMatch boolean Predicate T->boolean 全匹配
findAny Optional<T> 无参   查找任一元素
findFirst Optional<T> 无参   查找首元素
forEach 无返回值 Consumer T->void 消费流

 在Stream终端操作可以放入收集器Collector, Collectors工具类内置了很多Collector

Collectors

方法返回值R类型参数类型参数方法描述含义
toList List<T> 无参   转为List
counting Long 无参   统计元素个数
summingInt Integer ToIntFunction T->int Int总和
averagingInt Double ToIntFunction T->int Int平均数
maxBy Optional<T> Comparator (T,T)->int 最大值
joining String 无参   字符串拼接

现有一个list 集合  里面储存 R 对象



@Data
@AllArgsConstructor
public class R {
private String id;
private String type;
private String name;
private String gender;
private Map<String,String> skill;
public static List<R> getR(){
R r1 = new R("1", "fs", "Teemo", "男", ImmutableMap.of("p", "隐形的翅膀", "q", "致盲吹箭", "w", "小莫快跑", "e", "毒性射击", "r", "种蘑菇"));
R r2 = new R("2", "zs", "Jax", "男", ImmutableMap.of("p", "", "q", "", "w", "", "e", "八档电风扇", "r", ""));
R r3 = new R("3", "zs", "Yasuo", "男", ImmutableMap.of("p", "", "q", "", "w", "", "e", "", "r", ""));
R r4 = new R("4", "fs", "Anne", "女", ImmutableMap.of("p", "", "q", "", "w", "", "e", "", "r", "提伯斯之怒"));
R r5 = new R("5", "ck", "Zed", "男", ImmutableMap.of("p", "", "q", "手里干", "w", "", "e", "", "r", ""));
return Arrays.asList(r1, r2, r3, r4, r5);
}
}

代码

public static void main(String[] args) {
List<R> rList = R.getR();
//遍历
rList.forEach(System.out::println);
//获取所有type 为zs的 R
List<R> _zs = rList.stream().filter(r -> ("zs").equals(r.getType())).collect(Collectors.toList());
//根据type分组 放入到map
Map<String, List<R>> _type = rList.stream().collect(Collectors.groupingBy(R::getType));
  
//获取rList中R的name,返回name集合
  
List<String> _name = rList.stream().map(r -> r.getName()).collect(Collectors.toList());
  //判断 fs 个数
  long count = rList.stream().filter(r -> "fs".equals(r.getType())).count();


}

  

 关于Stream的用法,后面还会有补充

posted on   一段枯-有猫版  阅读(38)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
 
欢迎这位怪蜀黍来到《java8 Stream - 一段枯-有猫版 - 博客园》
点击右上角即可分享
微信分享提示