说,您获得了List<KVPair>
,其中每个KVPair
都有String key
,String 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);
我能想到的一种方法是,首先对列表进行排序,然后迭代直到下一个不同于之前。
有没有更简单,更清晰的方法来找到它?
答案 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