java - 如何获取arrayList的重复元素和非重复元素?

标签 java list arraylist set

我有一个名为 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/

相关文章:

java - 如何使用 Streams 获取列表 map 值的平均值?

python - 在 python 中交换字典列表中的键

c++ - C2676实现结构列表时发生编译错误

list - 获取列表中的重复项并在列表中显示答案

java - 未在 firebase 中创建字符串的数组列表

java - 如何在 Spring boot AsyncConfigurer 中使用优先级队列

java - 为什么我的 JAVA SDK 没有 javac 二进制文件?

java - 无法在 JRE 8 中加载字体

java - 将 ArrayList 的有限项复制到另一个 List

java - ArrayList克隆仍然被引用?