[英]Check if all values in a map are equal
我需要检查地图中的所有值是否相等。 我有一种方法可以执行此任务,但想使用库或本机方法。 限制:Java 5 + Apache Commons库。
public static boolean isUnique(Map<Dboid,?> aMap){
boolean isUnique = true;
Object currValue = null;
int iteration = 0;
Iterator<?> it = aMap.entrySet().iterator();
while(it.hasNext() && isUnique){
iteration++;
Object value = it.next();
if(iteration > 1){
if (value != null && currValue == null ||
value == null && currValue != null ||
value != null && currValue != null & !value.equals(currValue)) {
isUnique = false;
}
}
currValue = value;
}
return isUnique;
}
那么这样的事情呢:
Set<String> values = new HashSet<String>(aMap.values());
boolean isUnique = values.size() == 1;
您可以将值存储在双向映射中,并且始终具有此属性。
正如我上面的评论:
//think in a more proper name isAllValuesAreUnique for example
public static boolean isUnique(Map<Dboid,?> aMap){
if(aMap == null)
return true; // or throw IlegalArgumentException()
Collection<?> c = aMap.getValues();
return new HashSet<>(c).size() <= 1;
}
public static boolean isUnique(Map<Dboid,?> aMap) {
Set<Object> values = new HashSet<Object>();
for (Map.Entry<Dboid,?> entry : aMap.entrySet()) {
if (!values.isEmpty() && values.add(entry.getValue())) {
return false;
}
}
return true;
}
如果映射中存在许多差异,则此解决方案的优点是可以节省内存。 对于空Map
的特殊情况,您可以选择false
作为返回值,并根据需要进行适当更改。
甚至没有Set
也会更好(如果您的Map
不包含空值):
public static boolean isUnique(Map<Dboid,?> aMap) {
Object value = null;
for (Object entry : aMap.values()) {
if (value == null) {
value = entry;
} else if (!value.equals(entry)) {
return false;
}
}
return true;
}
我知道最初的问题需要Java 5的解决方案,但是如果其他人寻求该问题的答案并不仅限于Java 5,这是Java 8的方法。
return aMap.values().stream().distinct().limit(2).count() < 2
怎么样
return (new HashSet(aMap.values()).size() == 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.