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

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

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

Java List集合去重的多種方法

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

/**
* 循環(huán)list中的所有元素然后刪除重復(fù)
* @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中重復(fù)元素,并保持順序

/**
 * 刪除List中重復(fù)元素,并保持順序
 * @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能添加進(jìn)去就代表不是重復(fù)的元素
        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 注意事項(xiàng)

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

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ù)年級(jí)和專業(yè),當(dāng)年級(jí)和專業(yè)都相同的情況下看做是重復(fù)數(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í)候算重復(fù)數(shù)據(jù)

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

7 刪除集合中多個(gè)元素

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

    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é)

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

相關(guān)文章

  • Java優(yōu)先隊(duì)列PriorityQueue超全解析

    Java優(yōu)先隊(duì)列PriorityQueue超全解析

    在Java集合框架中,PriorityQueue是一個(gè)非常特殊的隊(duì)列實(shí)現(xiàn),它不遵循典型的先進(jìn)先出規(guī)則,而是按照元素的自然排序順序或提供的比較器來對(duì)元素進(jìn)行排序,這篇文章主要介紹了Java優(yōu)先隊(duì)列PriorityQueue的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)

    JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)

    JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)...
    2006-12-12
  • 一文帶你掌握J(rèn)ava8中函數(shù)式接口的使用和自定義

    一文帶你掌握J(rèn)ava8中函數(shù)式接口的使用和自定義

    函數(shù)式接口是?Java?8?引入的一種接口,用于支持函數(shù)式編程,下面我們就來深入探討函數(shù)式接口的概念、用途以及如何創(chuàng)建和使用函數(shù)式接口吧
    2023-08-08
  • Rocketmq消息批量發(fā)送&消息批量消費(fèi)方式

    Rocketmq消息批量發(fā)送&消息批量消費(fèi)方式

    文章介紹了RocketMQ中消息的批量發(fā)送和消費(fèi)機(jī)制,包括批量發(fā)送的優(yōu)點(diǎn)、限制及注意事項(xiàng),以及消息消費(fèi)模式的推、拉兩種方式,重點(diǎn)闡述了DefaultLitePullConsumer和DefaultMQPushConsumer的使用方法和注意事項(xiàng),并提供了代碼示例
    2026-05-05
  • Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    這篇文章主要介紹了Spring中的@Qualifier注解和@Resource注解區(qū)別解析,@Qualifier注解的用處是當(dāng)一個(gè)接口有多個(gè)實(shí)現(xiàn)的時(shí)候,為了指名具體調(diào)用哪個(gè)類的實(shí)現(xiàn),@Resource注解可以通過 byName命名和byType類型的方式注入,需要的朋友可以參考下
    2023-11-11
  • SpringMVC的處理器適配器-HandlerAdapter的用法及說明

    SpringMVC的處理器適配器-HandlerAdapter的用法及說明

    這篇文章主要介紹了SpringMVC的處理器適配器-HandlerAdapter的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺談三分鐘學(xué)習(xí)Java泛型中T、E、K、V、?的含義

    淺談三分鐘學(xué)習(xí)Java泛型中T、E、K、V、?的含義

    這篇文章主要介紹了淺談三分鐘學(xué)習(xí)Java泛型中T、E、K、V、?的含義,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 深入了解JAVA 軟引用

    深入了解JAVA 軟引用

    這篇文章主要介紹了JAVA 軟引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • IDEA Maven Mybatis generator 自動(dòng)生成代碼(實(shí)例講解)

    IDEA Maven Mybatis generator 自動(dòng)生成代碼(實(shí)例講解)

    下面小編就為大家分享一篇IDEA Maven Mybatis generator 自動(dòng)生成代碼的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 使用JAXBContext輕松實(shí)現(xiàn)Java和xml的互相轉(zhuǎn)換方式

    使用JAXBContext輕松實(shí)現(xiàn)Java和xml的互相轉(zhuǎn)換方式

    這篇文章主要介紹了依靠JAXBContext輕松實(shí)現(xiàn)Java和xml的互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

额济纳旗| 桃江县| 鹿泉市| 固安县| 故城县| 军事| 三都| 成武县| 正宁县| 临武县| 特克斯县| 陇南市| 宝丰县| 麟游县| 巨野县| 宝鸡市| 视频| 崇左市| 梨树县| 安塞县| 栾川县| 济宁市| 乡城县| 凤冈县| 和硕县| 庆元县| 淳化县| 峨眉山市| 丁青县| 岳普湖县| 南乐县| 重庆市| 宣威市| 长泰县| 汾阳市| 定边县| 门源| 山阴县| 临泽县| 汉中市| 新安县|