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

时间:2014-03-14 17:38:09

标签: java map

我需要检查地图中的所有值是否相等。我有一个方法来执行此任务,但想使用库或本机方法。限制: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;
}

6 个答案:

答案 0 :(得分:10)

这样的事情怎么样:

Set<String> values = new HashSet<String>(aMap.values());
boolean isUnique = values.size() == 1;

答案 1 :(得分:1)

您可以存储 Bidirectional Map中的值并始终拥有此属性。

答案 2 :(得分: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;
    }

答案 3 :(得分: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;
}

答案 4 :(得分:1)

我知道原始问题要求Java 5中的解决方案,但是如果其他人在寻找这个问题的答案并不仅限于Java 5,这里是Java 8方法。

return aMap.values().stream().distinct().limit(2).count() < 2

答案 5 :(得分:0)

怎么样

return (new HashSet(aMap.values()).size() == 1)