前言
Jdk8的Stream流开发,一行代码,让你的代码质量高上一个档次。
场景一:判空处理
Optional的引入很好的解决空指针异常。
Optional.ofNullable(userList).ifPresent(users -> { ... });
场景二:循环遍历
users.stream().forEach(user-> { ... });
场景三:filter过滤
users.stream().filter(user -> Objects.equals(1, user.getStatus()))
.map(p -> p.getName())
.collect(Collectors.joining(","));
场景四:数据汇总
1.取出所有用户邮件信息数据。
notices.stream().map(p -> p.getEmail()).distinct().collect(Collectors.joining(","));
2.将string数组,转换为long数组
Long[] userIds =
Arrays.stream(users).map(Long::valueOf).toArray(Long[]::new);
场景四:排序
users.stream().sorted((h1, h2) -> h2.getSort().compareTo(h1.getSort()))
.collect(Collectors.toList());
场景五:格式化列数据
在一个集合中,遇到某列需要关联数据字典,得到格式化的字典值。可以采用先将所有的数据字典集合查出,通过循环匹配,得到所需的数据。好处是避免了重复调用资源,导致响应缓慢。
List<HashMap<String, Object>> systemType = dictSrvClient.queryDictByType("systemType");
itemList.stream().map(item -> systemType.stream()
.filter(m -> Objects.equals(m.get("name"), item.getAppType()))
.findFirst().map(m -> {
item.setAppType(m.get("value").toString());
return item;
}).orElseGet(() -> {
item.setAppType("");
return item;
})).collect(Collectors.toList());
场景六:分页查询
List<Map<String, Object>> resultList = dataList.stream().filter(data -> {
if (StringUtils.isBlank(nickname)) {
return true;
}
//汇总所有数据
String values = data.entrySet().stream().map(x -> "" + x.getValue()).collect(Collectors.joining(","));
if (values.indexOf(nickname) != -1) {
return true;
}
return false;
})
.skip(startRow).limit(pageSize).collect(Collectors.toList());
总结
以上是我在实际项目中遇到的场景,希望这篇文章能对大家有所帮助。