天天看點

Jdk8的Stream流真香,來自個人工作彙總前言

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());
           

總結

以上是我在實際項目中遇到的場景,希望這篇文章能對大家有所幫助。