激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java關于List集合去重方案詳細介紹

Java關于List集合去重方案詳細介紹

2022-01-04 00:35JavaEdge. Java教程

實際項目開發中,很多業務場景下都會遇見集合去重。在說到List集合去重之前,首先我們回顧下普通類型的list如何去重

1 常規去重

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

// 遍歷后判斷賦給另一個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元素為基本數據類型及String類型時是可以的,但是如果List集合元素為對象,卻失效了!

Java關于List集合去重方案詳細介紹

2 對象去重

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

2.1 stream去重

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

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

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

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

輸出結果:

Java關于List集合去重方案詳細介紹

重寫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();
    }

到此這篇關于Java關于List集合去重方案詳細介紹的文章就介紹到這了,更多相關Java List集合去重內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_33589510/article/details/120083117

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 欧美性受xxxx白人性爽 | 久久亚洲激情 | 末成年女av片一区二区 | 午夜爽爽爽男女免费观看hd | 国产电影精品久久 | 亚洲性爰| 欧美一区二区三区中文字幕 | 亚洲精品成人久久久 | 国产美女一区二区在线观看 | www视频免费在线观看 | 欧美日韩国产综合网 | 夜间福利网站 | 色中色激情影院 | 久草在线观看资源 | www.com超碰| 国产成人77亚洲精品www | 91久久久久久亚洲精品禁果 | 羞羞视频免费入口网站 | 3级毛片 | 久久久久久久久浪潮精品 | 中国成人在线视频 | 国产精品免费观看视频 | 国产午夜免费不卡精品理论片 | 亚洲国产精品久久久久久久 | 福利视频亚洲 | 日韩美香港a一级毛片免费 日韩激情 | 黄色的视频免费观看 | 毛片a片免费看 | 久久久久九九九女人毛片 | 91精品国产福利尤物免费 | 日韩黄色免费在线观看 | 国产一级不卡毛片 | 在线a亚洲视频播放在线观看 | 成人免费视频视频在线观看 免费 | 九九热播视频 | 欧美日韩在线视频一区 | 国产在线看一区 | av电影免费在线看 | 中文字幕欧美亚洲 | 日韩午夜片 | 久久精品一区二区三区国产主播 |