需求陈述
在一个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));
}
}
}