示例:
emp-1:{id:1,name:A}
emp-2:{id:1,name:B}
emp-3:{id:2,name:B}
emp-2:{id:1,name:A}
List<emps>
如何使用name
查找重复的id
我的示例代码(如果可能)将其调整到最佳状态
Map<Long, List<String>> dulicateNamesById = new HashMap<>();
List<String> values = new ArrayList<>();
for (Emp emp: emps) {
if (dulicateNamesById.containsKey(emp.getId())) {
List<String> list = dulicateNamesById.get(emp.getId());
if(list.contains(emp.getName())){
return "XXXXXXX"; // if duplicate name present aganest same id return message
}
values.add(emp.getName());
dulicateNamesById.put(emp.getId(), values);
} else {
values = new ArrayList<>();
values.add(emp.getName());
dulicateNamesById.put(emp.getId(), values);
}
}
答案 0 :(得分:0)
无论使用哪种语言,解决方案都是相同的:遍历列表并查找重复项。有很多方法可以执行此操作,其中一种方法是将名称添加到新列表newList
中,如果newList
已经包含名称,则抛出异常。
答案 1 :(得分:0)
这是删除重复密钥的简单解决方案
var arrayWithDuplicates = [
{"type":"LICENSE", "licenseNum": "12345", state:"NV"},
{"type":"LICENSE", "licenseNum": "A7846", state:"CA"},
{"type":"LICENSE", "licenseNum": "12345", state:"OR"},
{"type":"LICENSE", "licenseNum": "10849", state:"CA"},
{"type":"LICENSE", "licenseNum": "B7037", state:"WA"},
{"type":"LICENSE", "licenseNum": "12345", state:"NM"}
];
function removeDuplicates(originalArray, prop) {
var newArray = [];
var lookupObject = {};
for(var i in originalArray) {
lookupObject[originalArray[i][prop]] = originalArray[i];
}
for(i in lookupObject) {
newArray.push(lookupObject[i]);
}
return newArray;
}
var uniqueArray = removeDuplicates(arrayWithDuplicates, "licenseNum");
console.log(uniqueArray);
答案 2 :(得分:0)
使用所包含的类,以下报告根据ID重复。它只是将在同一set
中具有相同ID的任何人分组。
List<Emp> emps = List.of(new Emp(1, "A"), new Emp(1, "B"),
new Emp(2, "B"), new Emp(1, "A"));
Map<Integer, List<Emp>> dups = emps.stream().collect(
Collectors.groupingBy((Emp e) -> e.id));
dups.entrySet().forEach(System.out::println);
打印
1 = [(1,A),(1,B)]
2 = [((2,B)]
class Emp {
public int id;
public String name;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}
@Override
public boolean equals(Object obj) {
return ((Emp)obj).id == id;
}
public String toString() {
return "(" + id + ", " + name+ ")";
}
}