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

原文地址:https://www.cnblogs.com/yadongliang/p/11542815.html