Stream API 很强大,也很简洁,可以极高的开发效率,但也有不好debug的短板,以下是我的学习心得,记录下,方便以后查阅
collect()
:将元素收集到集合中
filter()
:过滤 Stream 中的数据
map()
:将 Stream 中的每一个元素转换成另一个对象
mapToInt/mapToLong/mapToDouble
: 将流中的元素转换为int、long、double
max/min
:获取流中的最大/小值
anyMatch/allMatch/noneMatch
: 检查流中是否有元素满足条件
sorted
:流中的元素进行排序
takeWhile
: 如果流中的元素不满足条件,则直接结流操作。
// 将List转换为Map
Map<Long, String> map = testList
.stream()
.filter(i -> i != null)
.collect(Collectors.toMap(Test::getId, Test::getName));
Map<String, Test> map = testList.stream()
.collect(Collectors.toMap(Test::getCategoryId, test -> test));
// 转换为list
List<String> paths = testList.stream()
// 将list转换为name/id的样式
.map(v -> String.format("%s/%s", v.getName(), v.getId()))
// 转换为list
.collect(Collectors.toList());
// 将数组中元素的值取出,并去重
// 集合去空
Set<String> codeSet = codeList.stream()
// 过滤空元素
.filter(o -> !StringUtils.isEmpty(o.getCode()))
// 将集合中的元素转换为实体类的code
.map(CodeDto:: getCode)
// 将集合转换为set
.collect(Collectors.toSet());