最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java List對象集合中 如何根據(jù)集合中對象某幾個屬性組合去重

 更新時間:2025年09月04日 08:44:55   作者:北漂編程小王子  
本文介紹Java中基于對象屬性去重的三種方法,各方法在保持順序和實現(xiàn)復(fù)雜度上有所不同,適用于不同場景,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

Java List對象集合中 如何根據(jù)集合中對象某幾個屬性組合去重

在Java中,如果你想要根據(jù)一個List中的對象的幾個屬性進行去重,可以使用以下幾種方法:

方法一:使用 Set 和自定義的 equals() 和 hashCode()

你可以創(chuàng)建一個自定義類,并為這個類實現(xiàn)equals()和hashCode()方法。然后使用HashSet來存儲這些對象,因為HashSet不允許重復(fù)元素。

class MyClass {
    private String attr1;
    private String attr2;
    // 構(gòu)造函數(shù)
    public MyClass(String attr1, String attr2) {
        this.attr1 = attr1;
        this.attr2 = attr2;
    }
    // getter 和 setter 省略...
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null || getClass() != obj.getClass())
            return false;
        MyClass other = (MyClass) obj;
        return attr1.equals(other.attr1) && attr2.equals(other.attr2);
    }
    @Override
    public int hashCode() {
        return attr1.hashCode() ^ attr2.hashCode();
    }
}
// 使用示例
List<MyClass> list = new ArrayList<>();
// 填充list...
Set<MyClass> set = new HashSet<>(list);
list.clear();
list.addAll(set); // 去重后的list

方法二:使用 Java 8 及以上版本的 Stream API

利用Java 8的Stream API,可以簡化代碼。通過收集器Collectors.toCollection()與LinkedHashSet保證插入順序。

List<MyClass> distinctList = list.stream()
    .collect(Collectors.toCollection(LinkedHashSet::new))
    .stream()
    .collect(Collectors.toList());```

如果需要根據(jù)特定屬性去重,可以使用distinct()結(jié)合Comparator或更復(fù)雜的邏輯。

方法三:使用 Collectors.groupingBy 和 findFirst

這種方法可以確保只保留每個組的第一個元素:

Map<String, MyClass> result = list.stream()
    .collect(Collectors.toMap(
        o -> o.getAttr1() + o.getAttr2(), // key generator
        Function.identity(), // value mapper
        (oldValue, newValue) -> oldValue // merge function
    ));
List<MyClass> distinctList = new ArrayList<>(result.values());

這里,鍵是屬性組合的字符串表示形式,而值則是MyClass對象本身。請注意這種方法可能不會保持元素的原始順序。

擴展:java list集合三種去重方法

java list集合三種去重方法

public class ListDistinct <T>{
    /**
     * 通過set去重, 不打亂原有l(wèi)ist的順序
     *       list中相同的對象會被去重復(fù)
     *      
     * @param List<T> list
     * @return List<T>
     * */
    public List<T> distinctBySetOrder(List<T> list){
        Set<T> set = new  HashSet<T>(); 
        List<T> newList = new  ArrayList<T>(); 
        for (T t :list) {
           if(set.add(t)){
               newList.add(t);
           }
        }
        return newList;
    }
    /**
     * 通過set去重, 順序可能會亂
     *       list中相同的對象會被去重復(fù)
     *      
     * @param List<T> list
     * @return List<T>
     * */
    public List<T> distinctBySet(List<T> list){
        return new ArrayList<T>(new HashSet<T>(list));
    }
    /**
     * 通過遍歷判斷后將賦予新的集合
     * 
     * @param List<T>
     * @reutrn List<T>
     * */
    public List<T> distinctByANewList(List<T> list){
        List<T> newList = new  ArrayList<T>(); 
        for(T t : list){
            if(!newList.contains(t)){
                newList.add(t);
            }
        }
        return newList;
    }
    public static void main(String[] args){
        ListDistinct<String> ld = new ListDistinct<String>();
        List<String> list  =   new  ArrayList<String>(); 
        list.add("zhang");
        list.add("zhang");
        list.add("ss");
        list.add("ss");
        list.add("2s");
        list.add("s3");
        System.out.println("1:" + ld.distinctBySetOrder(list).toString());
        System.out.println("2:" + ld.distinctBySet(list).toString());
        System.out.println("3:" + ld.distinctByANewList(list).toString());
    }
}

到此這篇關(guān)于Java List對象集合中 如何根據(jù)集合中對象某幾個屬性組合去重的文章就介紹到這了,更多相關(guān)java list集合對象去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

宣武区| 东港市| 肥乡县| 灵山县| 那坡县| 海安县| 三明市| 铁力市| 天水市| 将乐县| 乐陵市| 龙川县| 郴州市| 华宁县| 三原县| 舟曲县| 兴和县| 中阳县| 河间市| 九江市| 太湖县| 静乐县| 班戈县| 柳江县| 涡阳县| 满洲里市| 黄龙县| 鸡泽县| 宜章县| 惠东县| 华坪县| 屏边| 绥中县| 隆德县| 垦利县| 新竹市| 诏安县| 分宜县| 德阳市| 措勤县| 凤山市|