如何在Java中使用StreamAPI進行數(shù)據(jù)的過濾、映射和排序?

Java中,stream api通過Filtermap和sorted方法高效處理集合數(shù)據(jù)。第一步用filter保留需要的數(shù)據(jù),如篩選年齡大于25的用戶;第二步用map轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),如提取用戶名或計算數(shù)值平方;第三步用sorted對結(jié)果排序,支持單條件、多條件及降序排列,同時需注意空值和異常處理。

如何在Java中使用StreamAPI進行數(shù)據(jù)的過濾、映射和排序?

在Java中,Stream API 提供了一種高效、簡潔的方式來處理集合數(shù)據(jù)。使用它進行數(shù)據(jù)的過濾、映射和排序,可以讓你寫出更清晰、更具可讀性的代碼。下面我們就來一步步看看怎么用。

如何在Java中使用StreamAPI進行數(shù)據(jù)的過濾、映射和排序?


過濾數(shù)據(jù):保留你真正需要的部分

在處理數(shù)據(jù)時,第一步往往是篩選出符合條件的數(shù)據(jù)。Stream 的 filter() 方法就是用來完成這個任務(wù)的。

如何在Java中使用StreamAPI進行數(shù)據(jù)的過濾、映射和排序?

  • 使用方式是傳入一個返回布爾值的 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ù)值做計算。

如何在Java中使用StreamAPI進行數(shù)據(jù)的過濾、映射和排序?

  • 使用 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());

常見錯誤提醒:

  • map() 返回的是 Stream,如果中間有 NULL 值,可能會導(dǎo)致空指針異常。
  • 如果需要跳過 null 或者進行扁平化處理,可以用 flatMap()。

排序數(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)聲明
THE END
喜歡就支持一下吧
點贊6 分享