繁体   English   中英

检查地图中的所有值是否相等

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM