我有一个名为 Riziv 的对象,其中包含三个变量:id、cnk 和 product。然后我在数据库中搜索此对象并将其添加到 ArrayList
作为ArrayList<Riziv>
列表。
现在我应该检查他的数组中的所有对象是否都相同 cnk
然后返回 true 否则我应该返回所有不相同的对象 cnk
带有错误信息。
public class Riziv{ String id, cnk, product; }
ArrayList<Riziv> list = getArrayListFromDatabank(id);
public void getDuplicatedWhichHasTheSameCnk(){
}
}
最佳答案
使用标准的 JVM 结构(MultiMap 由 guava 提供),你可以这样做:
public List<Riviz> getDuplicates(final List<Riviz> l)
{
final HashMap<String, List<Riviz>> m = new HashMap<String, List<Riviz>>();
final List<Riviz> ret = new ArrayList<Riviz>();
String cnk;
for (final Riviz r: l) {
cnk = r.getCnk();
if (!m.contains(cnk))
m.add(cnk, new ArrayList<Riviz>());
m.get(cnk).add(r);
}
List<Riviz> tmp;
for (final Map.Entry<String, List<Riviz>> entry: m.entrySet()) {
tmp = entry.getValue();
if (tmp.size() == 1) // no dups
continue;
ret.addAll(tmp);
}
return ret;
}
ret
将包含重复项。您可以更改该函数以返回 Map<String, Riviz>
相反,并过滤掉列表大小仅为一个的条目。然后,您将获得一个映射,其中冲突的 cnks 作为键 , 一个 dups 列表作为值。
关于java - 如何获取arrayList的重复元素和非重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604446/