java stream流用法汇总
项目中大部分使用的是list,这里就以list为例
实体对象#
public class QueryUserRspBo {
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String userName;
filter#
例如;过滤集合中姓名为“gu”的数据,得到的是过滤后的数据
List<QueryUserRspBo> collect = list.stream().filter(queryUserRspBo -> queryUserRspBo.getUserName() == "gu").collect(Collectors.toList());
System.out.println("过滤名称为gu的数据集合="+ JSON.toJSONString(collect));
list.stream;将集合转换成流
collect;是个收集器,将过滤后的数据收集起来
Collectors.toList();将收集起来的数据转化成list
distinct#
过滤掉集合中重复的元素,过滤的是所有元素都相同的对象
List<QueryUserRspBo> collect = list.stream().distinct().collect(Collectors.toList());
System.out.println("去除重复数据后的集合="+JSON.toJSONString(collect))
sorted#
对集合中元素进行排序,用来排序的元素类型必须是int才行
List<QueryUserRspBo> collect = list.stream()
.sorted((queryUserRspBo1, queryUserRspBo2) -> queryUserRspBo1.getUserId() -
queryUserRspBo2.getUserId())
.collect(Collectors.toList());
limit(long n)#
返回前 n 个元素
List<QueryUserRspBo> collect = list.stream().limit(2).collect(Collectors.toList());
System.out.println("返回前两个元素="+JSON.toJSONString(collect));
anyMatch#
集合中是否有一个元素值 为目标值,返回的是true或者false
boolean b = list.stream().anyMatch(queryUserRspBo -> queryUserRspBo.getUserName().equals("cc"));
if (b) {
System.out.println("cc i love you!");
}else {
System.out.println("查无此人");
}
.collect(Collectors.toMap())#
将收集到的元素转换成map
List<QueryUserRspBo> list = new ArrayList<>();
list.add(new QueryUserRspBo(500L,"孙悟空"));
list.add(new QueryUserRspBo(400L,"猪八戒"));
list.add(new QueryUserRspBo(300L,"沙悟净"));
list.add(new QueryUserRspBo(50L,"唐三藏"));
Map<Object, Object> map = list.stream().collect(Collectors.toMap(p -> p.getUserName(), p -> p.getUserId(), (p1, p2) -> p1));
System.out.println(map);
各参数的含义:
p -> p.getUserName();将对象的名称作为key
p -> p.getUserId();将对象的id作为value
(p1, p2) -> p1;如果对象1和对象2冲突,以对象1为标准
.collect(Collectors.joining())#
将收集到的元素使用分隔符拼接起来
List<QueryUserRspBo> list = new ArrayList<>();
list.add(new QueryUserRspBo(500L,"孙悟空"));
list.add(new QueryUserRspBo(400L,"猪八戒"));
list.add(new QueryUserRspBo(300L,"沙悟净"));
list.add(new QueryUserRspBo(50L,"唐三藏"));
String collect = list.stream().map(p -> p.getUserName()).collect(Collectors.joining(","));
System.out.println(collect);
.collect(Collectors.groupingBy(参数))#
将收集到的元素按照一定条件分组
List<QueryUserRspBo> list = new ArrayList<>();
list.add(new QueryUserRspBo(500L,"孙悟空","动物"));
list.add(new QueryUserRspBo(400L,"猪八戒","动物"));
list.add(new QueryUserRspBo(300L,"沙悟净","动物"));
list.add(new QueryUserRspBo(50L,"唐三藏","人"));
Map<String, List<QueryUserRspBo>> collect = list.stream().collect(Collectors.groupingBy(QueryUserRspBo::getType));
System.out.println(collect);
使用示例#
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> items = Arrays.asList("apple", "banana", "orange", "kiwi", "melon", "mango");
// 1. 过滤列表元素
List<String> filteredItems = items.stream()
.filter(item -> item.length() > 5)
.collect(Collectors.toList());
System.out.println(filteredItems); // 输出:[melon, mango]
// 2. 转换列表元素
List<String> transformedItems = items.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(transformedItems); // 输出:[APPLE, BANANA, ORANGE, KIWI, MELON, MANGO]
// 3. 查找列表中的元素
String foundItem = items.stream()
.filter(item -> item.startsWith("m"))
.findFirst()
.orElse(null);
System.out.println(foundItem); // 输出:mango
// 4. 计算列表元素的总和(例如字符串长度之和)
int totalLength = items.stream()
.mapToInt(String::length)
.sum();
System.out.println(totalLength); // 输出:32
// 5. 分组列表元素
List<List<String>> groupedItems = items.stream()
.collect(Collectors.groupingBy(item -> item.charAt(0)))
.values()
.stream()
.collect(Collectors.toList());
System.out.println(groupedItems); // 输出:分组后的列表
// 6. 排序列表元素
List<String> sortedItems = items.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedItems); // 输出:[apple, banana, kiwi, mango, melon, orange]
// 7. 并行处理
List<String> parallelProcessedItems = items.parallelStream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(parallelProcessedItems); // 输出:转换后的列表(并行处理)
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)