欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java List集合去重的多種實現(xiàn)方法

 更新時間:2025年02月18日 09:15:35   作者:趙廣陸  
Java中List集合去重的多種方法,包括使用循環(huán)、HashSet、保持順序去重、contain方法去重等,注意在刪除元素時,直接操作會導致ConcurrentModificationException,應使用傳統(tǒng)for循環(huán)或倒序刪除

Java List集合去重的多種方法

1 循環(huán)list中的所有元素然后刪除重復

/**
* 循環(huán)list中的所有元素然后刪除重復
* @param list 待去重的list
* @return 去重后的list
*/
public static <T> List<T> removeDuplicate(List<T> list){
  for(int i=0;i<list.size()-1;i++){
      for(int j=list.size()-1;j>i;j--){
          if (list.get(j).equals(list.get(i))){
              list.remove(j);
          }
      }
  }
  return list;
}

2 通過HashSet去重

/**
 * 通過HashSet去重
 * @param list 待去重的list
 * @return 去重后的list
 */
public static <T> List<T> removeDuplicateHashSet(List<T> list){
    HashSet<T> hs = new HashSet<>(list);
    list.clear();
    list.addAll(hs);
    return list;
}

3 刪除List中重復元素,并保持順序

/**
 * 刪除List中重復元素,并保持順序
 * @param list 待去重的list
 * @return 去重后的list
 */
public static <T> List<T> removeDuplicateKeepOrder(List<T> list){
    Set set = new HashSet();
    List<T> newList = new ArrayList<>();
    for (T element : list) {
        //set能添加進去就代表不是重復的元素
        if (set.add(element)) newList.add(element);
    }
    list.clear();
    list.addAll(newList);
    return list;
}

4 利用list.contain() 去重

/**
 * 利用list.contain() 去重
 * @param list
 * @return
 */
public static <T> List<T> removeDuplicateContain(List<T> list){
    List<T> listTemp = new ArrayList<>();
    for (T aList : list) {
        if (!listTemp.contains(aList)) {
            listTemp.add(aList);
        }
    }
    return listTemp;
}

5 注意事項

刪除的時候size或者長度也在發(fā)生變化,這樣會造成少刪除,也可用Stream流進行過濾刪除

List filterList = list.stream().filter(user -> user.getAge() >= 40)        .collect(toList());

例子:

JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody());
        String content = jsonObject.getString("content");
        JSONArray jsonArray = JSONObject.parseArray(content);
        for (int i = jsonArray.size() - 1; i >= 0; i--) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            String caseId = jsonObject1.getString("caseId");
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("user_id",caseInfoQueryParam.getUserId());
            queryWrapper.eq("case_id",caseId);
            queryWrapper.last("limit 1");
            CaseInfo caseInfo = caseInfoMapper.selectOne(queryWrapper);
            logger.info("案件綁定詳情去重的案件->{}",caseInfo);
            if (caseInfo!=null){
                jsonArray.remove(i);
            }
        }

6 利用stream分組及去重

分組

classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));

java8去重(根據(jù)年級和專業(yè),當年級和專業(yè)都相同的情況下看做是重復數(shù)據(jù))

List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));

通過hashSet去重(如將classNames去重):該種去重是bean完全相同的時候算重復數(shù)據(jù)

List<String> classNameList = new ArrayList(new HashSet(classNames));

7 刪除集合中多個元素

因為stream遍歷的底層還是迭代器所以就不能邊遍歷邊刪除會出現(xiàn)異常ConcurrentModificationException,所以用傳統(tǒng)for循環(huán)刪除,一種刪除是倒著刪,另一種就是刪除后重新倒退一位標志位

    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList();
        arrayList.add("111");
        arrayList.add("222");
//        arrayList.stream().forEach(s -> {
//            arrayList.remove(s);
//                    System.out.println(arrayList.size());
//                }
//        );
        for (int i = 0; i < arrayList.size(); i++) {
            arrayList.remove(i);
            i--;
        }
        System.out.println(arrayList);
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實現(xiàn)單調(diào)棧示例

    特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實現(xiàn)單調(diào)棧示例

    這篇文章主要為大家介紹了特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實現(xiàn)單調(diào)棧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Jmeter內(nèi)置變量vars和props的使用詳解

    Jmeter內(nèi)置變量vars和props的使用詳解

    JMeter是一個功能強大的負載測試工具,它提供了許多有用的內(nèi)置變量來支持測試過程,其中最常用的變量是 vars 和 props,本文通過代碼示例詳細給大家介紹了Jmeter內(nèi)置變量vars和props的使用,需要的朋友可以參考下
    2024-08-08
  • Java類加載之Class對象到Klass模型詳解

    Java類加載之Class對象到Klass模型詳解

    這篇文章主要介紹了Java類加載之Class對象到Klass模型詳解,每一個Java類在JVM中都會對應創(chuàng)建一個C++類實例,我們稱這個C++類為Klass實例,Klass實例里面存儲了java類中所描述的方法、字段、屬性等,需要的朋友可以參考下
    2023-08-08
  • 基于java中的null類型---有關null的9件事

    基于java中的null類型---有關null的9件事

    這篇文章主要介紹了java中的null類型---有關null的9件事,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 關于maven工程多模塊、項目打包問題

    關于maven工程多模塊、項目打包問題

    這篇文章主要介紹了關于maven工程多模塊、項目打包問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring事務管理中關于數(shù)據(jù)庫連接池詳解

    Spring事務管理中關于數(shù)據(jù)庫連接池詳解

    事務的作用就是為了保證用戶的每一個操作都是可靠的,事務中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就 回退到事務開始未進行操作的狀態(tài)。事務管理是Spring框架中最為常用的功能之一,我們在使用Spring Boot開發(fā)應用時,大部分情況下也都需要使用事務
    2022-12-12
  • springcloud Zuul動態(tài)路由的實現(xiàn)

    springcloud Zuul動態(tài)路由的實現(xiàn)

    這篇文章主要介紹了springcloud Zuul動態(tài)路由的實現(xiàn),詳細的介紹了什么是Zuu及其動態(tài)路由的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • JPA-JpaRepository方法命名語法說明

    JPA-JpaRepository方法命名語法說明

    這篇文章主要介紹了JPA-JpaRepository方法命名語法說明,具有很好的參考價值。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring中的FactoryBean與ObjectFactory詳解

    Spring中的FactoryBean與ObjectFactory詳解

    這篇文章主要介紹了Spring中的FactoryBean與ObjectFactory詳解,FactoryBean是一種特殊的bean,本身又是個工廠,實現(xiàn)了FactoryBean的bean會被注冊到容器中,需要的朋友可以參考下
    2023-12-12
  • SpringCloud啟動eureka server后,沒報錯卻不能訪問管理頁面(404問題)

    SpringCloud啟動eureka server后,沒報錯卻不能訪問管理頁面(404問題)

    這篇文章主要介紹了SpringCloud啟動eureka server后,沒報錯卻不能訪問管理頁面(404問題),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論