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

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

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

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

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

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

你可以創(chuàng)建一個(gè)自定義類,并為這個(gè)類實(shí)現(xiàn)equals()和hashCode()方法。然后使用HashSet來(lái)存儲(chǔ)這些對(duì)象,因?yàn)镠ashSet不允許重復(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,可以簡(jiǎn)化代碼。通過(guò)收集器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

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

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對(duì)象本身。請(qǐng)注意這種方法可能不會(huì)保持元素的原始順序。

擴(kuò)展:java list集合三種去重方法

java list集合三種去重方法

public class ListDistinct <T>{
    /**
     * 通過(guò)set去重, 不打亂原有l(wèi)ist的順序
     *       list中相同的對(duì)象會(huì)被去重復(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;
    }
    /**
     * 通過(guò)set去重, 順序可能會(huì)亂
     *       list中相同的對(duì)象會(huì)被去重復(fù)
     *      
     * @param List<T> list
     * @return List<T>
     * */
    public List<T> distinctBySet(List<T> list){
        return new ArrayList<T>(new HashSet<T>(list));
    }
    /**
     * 通過(guò)遍歷判斷后將賦予新的集合
     * 
     * @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對(duì)象集合中 如何根據(jù)集合中對(duì)象某幾個(gè)屬性組合去重的文章就介紹到這了,更多相關(guān)java list集合對(duì)象去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳談HashMap和ConcurrentHashMap的區(qū)別(HashMap的底層源碼)

    詳談HashMap和ConcurrentHashMap的區(qū)別(HashMap的底層源碼)

    下面小編就為大家?guī)?lái)一篇詳談HashMap和ConcurrentHashMap的區(qū)別(HashMap的底層源碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • springboot 如何修改默認(rèn)端口及application.properties常用配置

    springboot 如何修改默認(rèn)端口及application.properties常用配置

    這篇文章主要介紹了springboot 如何修改默認(rèn)端口及application.properties常用配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用Lombok導(dǎo)致打印的tostring中缺少父類的屬性問(wèn)題

    使用Lombok導(dǎo)致打印的tostring中缺少父類的屬性問(wèn)題

    使用Lombok時(shí),若發(fā)現(xiàn)@Data注解的@ToString不包含父類屬性,可通過(guò)添加@ToString(callSuper=true)解決,此方法確保在生成toString()時(shí)包括父類的屬性,有效解決只打印子類屬性的問(wèn)題,這種做法對(duì)于需要完整信息展示的場(chǎng)景尤為重要
    2024-11-11
  • 解決Thymeleaf中onclick的坑

    解決Thymeleaf中onclick的坑

    Thymeleaf中onclick屬性無(wú)法直接傳遞字符串參數(shù),需改用data-*屬性存儲(chǔ),再通過(guò)JS讀取,避免模板解析錯(cuò)誤,但可能仍有警告
    2025-08-08
  • Spring?Boot整合Kafka教程詳解

    Spring?Boot整合Kafka教程詳解

    這篇文章主要為大家介紹了Spring?Boot整合Kafka教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • java 注解實(shí)現(xiàn)一個(gè)可配置線程池的方法示例

    java 注解實(shí)現(xiàn)一個(gè)可配置線程池的方法示例

    這篇文章主要介紹了java 注解實(shí)現(xiàn)一個(gè)可配置線程池的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 深入理解Java中的SPI機(jī)制

    深入理解Java中的SPI機(jī)制

    這篇文章主要介紹了深入理解Java中的SPI機(jī)制,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作

    Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作

    這篇文章主要介紹了Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決

    SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決

    本文主要介紹了SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 解決IDEA Maven下載依賴時(shí)報(bào)錯(cuò)ERROR - #org.jetbrains.idea.maven - Cannot reconnect.

    解決IDEA Maven下載依賴時(shí)報(bào)錯(cuò)ERROR - #org.jetbrains.ide

    這篇文章主要介紹了解決IDEA Maven下載依賴時(shí)報(bào)錯(cuò)ERROR - #org.jetbrains.idea.maven - Cannot reconnect.問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

扎鲁特旗| 仙桃市| 阳西县| 晋城| 怀来县| 万荣县| 延安市| 二连浩特市| 孟连| 隆昌县| 汉中市| 温宿县| 清丰县| 靖边县| 沁水县| 黔西| 锡林浩特市| 潼关县| 前郭尔| 遵化市| 南安市| 滨海县| 仙桃市| 井陉县| 宣化县| 筠连县| 金溪县| 沾化县| 五大连池市| 霍州市| 宕昌县| 百色市| 桃江县| 江都市| 巫溪县| 阜宁县| 郴州市| 察隅县| 石景山区| 米脂县| 银川市|