在Java中,stream api通過Filter、map和sorted方法高效處理集合數(shù)據(jù)。第一步用filter保留需要的數(shù)據(jù),如篩選年齡大于25的用戶;第二步用map轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),如提取用戶名或計算數(shù)值平方;第三步用sorted對結(jié)果排序,支持單條件、多條件及降序排列,同時需注意空值和異常處理。
在Java中,Stream API 提供了一種高效、簡潔的方式來處理集合數(shù)據(jù)。使用它進行數(shù)據(jù)的過濾、映射和排序,可以讓你寫出更清晰、更具可讀性的代碼。下面我們就來一步步看看怎么用。
過濾數(shù)據(jù):保留你真正需要的部分
在處理數(shù)據(jù)時,第一步往往是篩選出符合條件的數(shù)據(jù)。Stream 的 filter() 方法就是用來完成這個任務(wù)的。
- 使用方式是傳入一個返回布爾值的 Lambda 表達式。
- 比如你想從一個用戶列表中找出所有年齡大于 25 歲的人:
List<User> filteredUsers = users.stream() .filter(user -> user.getAge() > 25) .collect(Collectors.toList());
注意點:
立即學(xué)習(xí)“Java免費學(xué)習(xí)筆記(深入)”;
- filter() 不會修改原始數(shù)據(jù),而是生成一個新的 Stream。
- 條件表達式盡量保持簡單,復(fù)雜邏輯可以封裝到方法里再引用。
映射數(shù)據(jù):把一種結(jié)構(gòu)轉(zhuǎn)換成另一種結(jié)構(gòu)
映射操作通常用于將一種類型的數(shù)據(jù)轉(zhuǎn)換為另一種類型,比如提取對象中的某個字段,或者對數(shù)值做計算。
- 使用 map() 方法來進行映射:
List<String> names = users.stream() .map(User::getName) .collect(Collectors.toList());
- 如果想對數(shù)字做處理,也可以這樣:
List<Integer> squares = numbers.stream() .map(n -> n * n) .collect(Collectors.toList());
常見錯誤提醒:
排序數(shù)據(jù):讓結(jié)果按你想要的方式排列
排序是展示數(shù)據(jù)時非常關(guān)鍵的一環(huán)。Stream 提供了 sorted() 方法來進行排序。
- 簡單排序可以直接用自然順序:
List<User> sortedByAge = users.stream() .sorted(Comparator.comparingInt(User::getAge)) .collect(Collectors.toList());
- 多條件排序也很方便:
.sorted(Comparator.comparing(User::getName).thenComparingInt(User::getAge))
- 降序的話加個 reversed():
.sorted(Comparator.comparingInt(User::getAge).reversed())
小技巧:
- 如果只是臨時排序后遍歷輸出,不一定非得收集成 List,可以直接 .foreach()。
- 注意排序字段是否可能為 null,避免運行時報錯。
基本上就這些。掌握好 filter、map 和 sorted 這三個操作,就能應(yīng)對大部分日常開發(fā)中的集合處理場景了。不復(fù)雜但容易忽略細節(jié),多練幾次就熟了。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END