首頁 >Java >java教程 >如何使用流按特定屬性的獨特性過濾 Java 8 集合?

如何使用流按特定屬性的獨特性過濾 Java 8 集合?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-28 11:15:14944瀏覽

How Can I Filter a Java 8 Collection by a Specific Property's Distinctness Using Streams?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn