Java 8:根據屬性差異性使用Stream API 過濾集合
在Java 8 中,distinct() 方法通常用於刪除流中的重複元素。但是,預設情況下,如果物件根據預設相等性檢查相等,則認為物件相等。對於需要根據特定屬性確定唯一性的情況,則需要採用更複雜的方法。
一種無需修改 Person 類別的解決方案是使用distinctByKey() 方法,可以如下實現:
public static <T> Predicate<T> distinctByKey(Function<T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); }
要使用此方法按名稱過濾 Person物件的集合,我們可以編寫:
persons.stream().filter(distinctByKey(Person::getName))
此方法使用有狀態過濾器追蹤先前看到的鍵值,確保僅保留每個唯一名稱的第一次出現。需要注意的是,在平行處理的情況下,distinctByKey() 方法可能無法保證不同元素的順序,這與預設的 unique() 方法不同。
以上是如何使用流按特定屬性的獨特性過濾 Java 8 集合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!