给定列表时,如何检查元素是否相等

时间:2012-08-03 01:16:11

标签: java

说,您获得了List<KVPair>,其中每个KVPair都有String keyString Value.equals()方法,可以正常运行。

您如何确认列表中的每个元素与另一个元素相同,或者查看是否至少有一个元素?

换句话说,如果我们有

KVPair kvp1 = new KVPAir("key", "value");
KVPair kvp2 = new KVPAir("key", "value");

List<KVPair> l = new ArrayList<KVPair>();
l.add(kvp1);
l.add(kvp2);

我能想到的一种方法是,首先对列表进行排序,然后迭代直到下一个不同于之前。

有没有更简单,更清晰的方法来找到它?

3 个答案:

答案 0 :(得分:3)

如果hashCode()也正确实现,您可以将它们全部添加到HashSet中,看看是否有重复项:

 Set<KVPair> set = new HashSet<KVPair>(l.size());
 for (KVPair p: l){
   if (!set.add(p))
      // you have a duplicate
 }

甚至(有点浪费)

Set<KVPair> set = new HashSet<KVPair)(l);
if (l.size() != set.size())
   // you have a duplicate
if (set.size() < 2)
   // all elements are equal

答案 1 :(得分:3)

这是一个通用的解决方案:

不要忘记进行空检查。首次向该组添加元素时,将始终添加该元素

public static boolean isListOfSameElements(List<? extends Object> l) {
    Set<Object> set = new HashSet<Object>(l.size());
    for (Object o : l) {
        if (set.isEmpty()) {
            set.add(o);
        } else {
            if (set.add(o)) {
                return false;
            }
        }
    }
    return true;
}

答案 2 :(得分:1)

使用java流:

list.stream().distinct().count() == 1