如何从对象列表中查找重复项,如何查找对象中的重复名是否具有一个ID

时间:2020-03-27 19:00:13

标签: javascript java arraylist

示例:

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);
    }
}

3 个答案:

答案 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+ ")";
    }

}
相关问题