根据对象中的重复字段,取出list集合中的重复对象

需求陈述

在一个list集合中 如: ArrayList< AgreementRecord > arrayList = new ArrayList<>();根据判断对象中的username字段和village字段是否重复,将其取出分类存在不同的集合中。

具体实现


import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import com.immigrant.model.AgreementRecord;

public class FindDuplicate {
    public static void main(String[] args) {

        ArrayList<AgreementRecord> arrayList = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            AgreementRecord agreementRecord = new AgreementRecord("网易", "农村");
            arrayList.add(agreementRecord);
        }
        for (int i = 0; i < 3; i++) {
            AgreementRecord agreementRecord = new AgreementRecord("百度", "北上广");
            arrayList.add(agreementRecord);
        }
        AgreementRecord agreementRecord = new AgreementRecord("新浪", "居委会");
        AgreementRecord agreementRecord111 = new AgreementRecord("新浪", "居委会");
        AgreementRecord agreementRecord10 = new AgreementRecord("新浪", "居");
        AgreementRecord agreementRecord2 = new AgreementRecord("新浪", "会");
        arrayList.add(agreementRecord);
        arrayList.add(agreementRecord111);
        arrayList.add(agreementRecord10);
        arrayList.add(agreementRecord2);
        int k = 0;
        for (AgreementRecord agreementRecord11 : arrayList) {

            System.out.println(agreementRecord11 + "==========" + k);
            k++;
        }

        Map<String, List<AgreementRecord>> map = new HashMap<String, List<AgreementRecord>>();
        for (AgreementRecord agreementRecord1 : arrayList) {
            if (map.containsKey(agreementRecord1.getUsername())) {
                List<AgreementRecord> rList = map.get(agreementRecord1.getUsername());
                rList.add(agreementRecord1);
            } else {
                List<AgreementRecord> rList = new ArrayList<AgreementRecord>();
                rList.add(agreementRecord1);
                map.put(agreementRecord1.getUsername(), rList);
            }
        }
        //System.out.println(map.toString());
        Map<String, List<AgreementRecord>> mm = new HashMap<String, List<AgreementRecord>>();
        for (String key : map.keySet()) {
            Map<String, List<AgreementRecord>> m = new HashMap<String, List<AgreementRecord>>();
            for (AgreementRecord agreementRecord1 : map.get(key)) {
                if (m.containsKey(agreementRecord1.getVillage())) {
                    List<AgreementRecord> rList = m.get(agreementRecord1.getVillage());
                    rList.add(agreementRecord1);
                } else {
                    List<AgreementRecord> rList = new ArrayList<AgreementRecord>();
                    rList.add(agreementRecord1);
                    m.put(agreementRecord1.getVillage(), rList);
                }
            }
            for (String agreementRecord1 : m.keySet()) {
                UUID uuid = UUID.randomUUID();
                String str = uuid.toString();
                String uuidStr = str.replace("-", "");
                mm.put(uuidStr, m.get(agreementRecord1));
                //System.out.println(agreementRecord1+":             "+m.get(agreementRecord1));
            }
        }

        for (String agreementRecord1 : mm.keySet()) {
            System.out.println(agreementRecord1+":             "+mm.get(agreementRecord1));

        }
    }
}

控制台输出:

AgreementRecord [username=网易, village=农村]==========0
AgreementRecord [username=网易, village=农村]==========1
AgreementRecord [username=百度, village=北上广]==========2
AgreementRecord [username=百度, village=北上广]==========3
AgreementRecord [username=百度, village=北上广]==========4
AgreementRecord [username=新浪, village=居委会]==========5
AgreementRecord [username=新浪, village=居委会]==========6
AgreementRecord [username=新浪, village=居]==========7
AgreementRecord [username=新浪, village=会]==========8

d3b4252d5aa7451da6573a11436c625d:   
[AgreementRecord [username=新浪, village=居委会], 
AgreementRecord [username=新浪, village=居委会]]

61bc3c9a1e6f4f198a2cd5ae47bce839:             
[AgreementRecord [username=网易, village=农村], 
AgreementRecord [username=网易, village=农村]]

c7d1865166ec41779c979428bd06c552:             
[AgreementRecord [username=新浪, village=会]]

0c058e210649411590820e27d51e0659:             
[AgreementRecord [username=百度, village=北上广], 
AgreementRecord [username=百度, village=北上广], 
AgreementRecord [username=百度, village=北上广]]

e670ecde43b440aa930c732b84c9f2d0:             
[AgreementRecord [username=新浪, village=居]]

遗留问题

目前代码仅仅只是实现了需求,但是代码写的不够简洁,如果涉及判断更多的字段的话那么冗余的代码就会更多。所以在此希望诸位高手能帮忙提出更好的方法。

后期优化

package com.immigrant.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.immigrant.model.AgreementRecord;

public class demo {
    public static void main(String[] args) {
        ArrayList<AgreementRecord> arrayList = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            AgreementRecord agreementRecord = new AgreementRecord("网易", "农村");
            arrayList.add(agreementRecord);
        }
        for (int i = 0; i < 3; i++) {
            AgreementRecord agreementRecord = new AgreementRecord("百度", "北上广");
            arrayList.add(agreementRecord);
        }
        AgreementRecord agreementRecord = new AgreementRecord("新浪", "居委会");
        AgreementRecord agreementRecord111 = new AgreementRecord("新浪", "居委会");
        AgreementRecord agreementRecord10 = new AgreementRecord("新浪", "居");
        AgreementRecord agreementRecord2 = new AgreementRecord("新浪", "会");
        arrayList.add(agreementRecord);
        arrayList.add(agreementRecord111);
        arrayList.add(agreementRecord10);
        arrayList.add(agreementRecord2);

        Collections.sort(arrayList, new Comparator<AgreementRecord>(){
            @Override
            public int compare(AgreementRecord o1, AgreementRecord o2) {
                int village = o1.getVillage().hashCode() - o2.getVillage().hashCode();
                int username = o1.getUsername().hashCode() - o2.getUsername().hashCode();
                return village+username;
            }
        });
        ArrayList<AgreementRecord> tList = new ArrayList<>();
        Map<String, List<AgreementRecord>> usernameMap = new HashMap<String, List<AgreementRecord>>();
        for(AgreementRecord a:arrayList){
            tList.add(a);
            if(!tList.get(0).getUsername().equals(a.getUsername()) || !tList.get(0).getVillage().equals(a.getVillage())){
                tList.remove(a);
                usernameMap.put(tList.get(0).getVillage(), tList);
                tList = new ArrayList<AgreementRecord>();
                tList.add(a);
            }
            usernameMap.put(tList.get(0).getVillage(), tList);
        }
        //遍历map集合输出元素
        for (String agreementRecord1 : usernameMap.keySet()) {
            System.out.println(agreementRecord1+":             "+usernameMap.get(agreementRecord1));
        }

    }
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值