亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java關(guān)于List集合去重方案詳細(xì)介紹

 更新時間:2021年09月15日 10:36:36   作者:JavaEdge.  
實際項目開發(fā)中,很多業(yè)務(wù)場景下都會遇見集合去重。在說到List集合去重之前,首先我們回顧下普通類型的list如何去重

1 常規(guī)去重

碰到List去重的問題,除了遍歷去重,我們常常想到利用Set集合不允許重復(fù)元素的特點(diǎn),通過List和Set互轉(zhuǎn),來去掉重復(fù)元素。

// 遍歷后判斷賦給另一個List集合,保持原來順序
public static void ridRepeat1(List<String> list) {
    System.out.println("list = [" + list + "]");
    List<String> listNew = new ArrayList<String>();
    for (String str : list) {
        if (!listNew.contains(str)) {
            listNew.add(str);
        }
    }
    System.out.println("listNew = [" + listNew + "]");
}

// Set集合去重,保持原來順序
public static void ridRepeat2(List<String> list) {
    System.out.println("list = [" + list + "]");
    List<String> listNew = new ArrayList<String>();
    Set set = new HashSet();
    for (String str : list) {
        if (set.add(str)) {
            listNew.add(str);
        }
    }
    System.out.println("listNew = [" + listNew + "]");
}

// Set去重     由于Set(HashSet)的無序性,不會保持原來順序
public static void ridRepeat3(List<String> list) {
    System.out.println("list = [" + list + "]");
    Set set = new HashSet();
    List<String> listNew = new ArrayList<String>();
    set.addAll(list);
    listNew.addAll(set);
    System.out.println("listNew = [" + listNew + "]");
}

// Set通過HashSet去重(將ridRepeat3方法縮減為一行) 無序
public static void ridRepeat4(List<String> list) {
    System.out.println("list = [" + list + "]");
    List<String> listNew = new ArrayList<String>(new HashSet(list));
    System.out.println("listNew = [" + listNew + "]");
}

// Set通過TreeSet去重   會按字典順序重排序
public static void ridRepeat5(List<String> list) {
    System.out.println("list = [" + list + "]");
    List<String> listNew = new ArrayList<String>(new TreeSet<String>(list));
    System.out.println("listNew = [" + listNew + "]");
}

// Set通過LinkedHashSet去重  保持原來順序
public static void ridRepeat6(List<String> list) {
    System.out.println("list = [" + list + "]");
    List<String> listNew = new ArrayList<String>(new LinkedHashSet<String>(list));
    System.out.println("listNew = [" + listNew + "]");
}

stream去重

  //利用java8的stream去重
  List uniqueList = list.stream().distinct().collect(Collectors.toList());
  System.out.println(uniqueList.toString());

上面的方法在List元素為基本數(shù)據(jù)類型及String類型時是可以的,但是如果List集合元素為對象,卻失效了!

2 對象去重

可利用for循環(huán)遍歷的方式進(jìn)行判斷去重,很簡單不贅述,看如下方法:

2.1 stream去重

// 根據(jù)name屬性去重
List<User> uniqueNameList = userList
        .stream()
        .collect(collectingAndThen(
                toCollection(() -> new TreeSet<>(comparing(User::getName))), ArrayList::new)
        );

System.out.println("根據(jù)name去重后集合元素:" + uniqueNameList.toString());

// 根據(jù)name,age屬性去重
List<User> uniqueNameAndAgeList = userList
        .stream()
        .collect(collectingAndThen(
                toCollection(() -> new TreeSet<>(comparing(o -> o.getName() + ";" + o.getAge()))), ArrayList::new)
        );

System.out.println("根據(jù)name,age去重后集合元素:" + uniqueNameAndAgeList.toString());

輸出結(jié)果:

重寫equals()、hashCode()

//重寫equals方法
 @Override
    public boolean equals(Object obj) {
        User user = (User) obj;
        return name.equals(user.getName()) && (age==user.getAge());
    }

//重寫hashCode方法
    @Override
    public int hashCode() {
        String str = name + age;
        return str.hashCode();
    }

到此這篇關(guān)于Java關(guān)于List集合去重方案詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Java List集合去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java使用DOM對XML文檔進(jìn)行增刪改查操作實例代碼

    java使用DOM對XML文檔進(jìn)行增刪改查操作實例代碼

    這篇文章主要介紹了java使用DOM對XML文檔進(jìn)行增刪改查操作實例代碼,實例涉及對xml文檔的增刪改查,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java異步調(diào)用的4種實現(xiàn)方法

    java異步調(diào)用的4種實現(xiàn)方法

    日常開發(fā)中,會經(jīng)常遇到說,前臺調(diào)服務(wù),本文主要介紹了java異步調(diào)用的4種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 深入理解Java8雙冒號::的使用

    深入理解Java8雙冒號::的使用

    這篇文章主要介紹了深入理解Java8雙冒號::的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Java豆瓣電影爬蟲——小爬蟲成長記(附源碼)

    詳解Java豆瓣電影爬蟲——小爬蟲成長記(附源碼)

    這篇文章主要介紹了詳解Java豆瓣電影爬蟲——小爬蟲成長記(附源碼) ,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • Spring?AOP?后置處理器使用方式

    Spring?AOP?后置處理器使用方式

    這篇文章主要介紹了Spring?AOP?后置處理器使用方式,文章圍繞主題相關(guān)內(nèi)容展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Spring?Security配置保姆級教程

    Spring?Security配置保姆級教程

    Spring?Security是一個功能強(qiáng)大且可高度自定義的身份驗證和訪問控制框架。它是保護(hù)基于Spring的應(yīng)用程序的事實上的標(biāo)準(zhǔn)。Spring?Security是一個專注于為Java應(yīng)用程序提供身份驗證和授權(quán)的框架
    2023-02-02
  • java實現(xiàn)遞歸菜單樹

    java實現(xiàn)遞歸菜單樹

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)遞歸菜單樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Java實現(xiàn)PDF轉(zhuǎn)為線性PDF詳解

    Java實現(xiàn)PDF轉(zhuǎn)為線性PDF詳解

    線性化PDF文件是PDF文件的一種特殊格式,可以通過Internet更快地進(jìn)行查看。本文將通過后端Java程序?qū)崿F(xiàn)將PDF文件轉(zhuǎn)為線性化PDF。感興趣的可以了解一下
    2021-12-12
  • Nacos注冊中心的部署與用法示例詳解

    Nacos注冊中心的部署與用法示例詳解

    注冊中心是微服務(wù)架構(gòu)中的紐帶,類似于“通訊錄”,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系,本文通過示例代碼給大家介紹Nacos注冊中心的部署與用法,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • SpringBoot lombok(注解@Getter @Setter)詳解

    SpringBoot lombok(注解@Getter @Setter)詳解

    通過使用Lombok庫,SpringBoot應(yīng)用可以自動化生成常用的方法如setter和getter,顯著降低了代碼冗余并提高了開發(fā)效率,Lombok的@Getter和@Setter注解用于自動生成屬性的訪問和修改方法,而@Data注解則提供了一個全面的解決方案
    2024-11-11

最新評論