Stream流開發
- 前言
-
- 場景一:判空處理
- 場景二:循環周遊
- 場景三:filter過濾
- 場景四:資料彙總
- 場景四:排序
- 場景五:格式化列資料
- 場景六:分頁查詢
- 總結
前言
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());
總結
以上是我在實際項目中遇到的場景,希望這篇文章能對大家有所幫助。