zoukankan      html  css  js  c++  java
  • List去重

    写在前面

    需求

    将totalList中的某些重复记录移除.(我这里的totalList中存的是对象)

    思路

    是把需要移除的记录存入removeList,  然后遍历totalList, 如果totalList中的元素在removeList中, 将该元素从totalList中移除.(土了点, 能用...)

    由SpringBoot源码get到的去重技能

    (见文章底部)

    代码

                resultList = financeService.selectCaTopupRec(filterMap);//充值记录
                // 去除重复ref_no的记录 start==
                if (resultList != null && !resultList.isEmpty()) {
                    List<String> needRemoveRefNoList = new ArrayList<>();
                    for (CaTopupRec caTopupRec : resultList) {
                        if (caTopupRec.getTopupAmt().compareTo(BigDecimal.ZERO) < 0) {
                            needRemoveRefNoList.add(caTopupRec.getRefNo());
                        }
                    }
                    if (!needRemoveRefNoList.isEmpty()) {
                        for (Iterator<CaTopupRec> iterator = resultList.iterator(); iterator.hasNext(); ) {
                            CaTopupRec next = iterator.next();
                            if (needRemoveRefNoList.contains(next.getRefNo())) {
                                iterator.remove();
                            }
                        }
                    }
                }
                // 去除重复ref_no的记录 end==

    List去重黑科技

    代码

    下面这行代码是看SpringBoot自动配置原理时get到的list去重:

    protected final <T> List<T> removeDuplicates(List<T> list) {
        return new ArrayList(new LinkedHashSet(list));
    }

    这是利用Set元素唯一的特性,实现了对一个集合进行去重操作,避免使用List的contains方法进行遍历、对比、去重操作。

    测试

    package com.xgcd.springboot;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.ArrayList;
    import java.util.LinkedHashSet;
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RemoveDuplicateTest {
        @Test
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            list.add("ddd");
            list.add("aaa");
            for (String str : list) {
                System.out.println(str);
            }
    
            System.out.println(">>>>>>>>>去重");
            LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(list);
            ArrayList<String> removeDuplicateList = new ArrayList<>(linkedHashSet);
            for (String str : removeDuplicateList) {
                System.out.println(str);
            }
        }
    }

    结果

    aaa
    bbb
    ccc
    ddd
    aaa
    >>>>>>>>>去重
    aaa
    bbb
    ccc
    ddd

  • 相关阅读:
    【ST开发板评测】Nucleo-F411RE开箱报告
    手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
    国产处理器的逆袭机会——RISC-V
    基于uFUN开发板和扩展板的联网校准时钟
    基于uFUN开发板的RGB调色板
    理解ffmpeg中的pts,dts,time_base
    如何终止线程的运行(C/C++)
    关于阻塞和非阻塞,同步和异步的总结
    QT移植无法启动 This application failed to start because it could not find or load the QT platform
    Qt5学习记录:QString与int值互相转换
  • 原文地址:https://www.cnblogs.com/yadongliang/p/11542815.html
Copyright © 2011-2022 走看看