Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查映射中的所有值是否相等_Java_Map - Fatal编程技术网

Java 检查映射中的所有值是否相等

Java 检查映射中的所有值是否相等,java,map,Java,Map,我需要检查映射中的所有值是否相等。我有一个执行此任务的方法,但希望使用库或本机方法。限制:Java5+ApacheCommons库 public static boolean isUnique(Map<Dboid,?> aMap){ boolean isUnique = true; Object currValue = null; int iteration = 0; Iterator<?> it = aMap.entrySet().iterator(); whil

我需要检查映射中的所有值是否相等。我有一个执行此任务的方法,但希望使用库或本机方法。限制:Java5+ApacheCommons库

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;
}
publicstaticbooleanique(映射aMap){
布尔值isUnique=true;
对象值=空;
int迭代=0;
迭代器it=aMap.entrySet().Iterator();
while(it.hasNext()&&isUnique){
迭代++;
对象值=it.next();
如果(迭代>1){
如果(值!=null&&currValue==null||
value==null&&currValue!=null||
value!=null&&currValue!=null&!value.equals(currValue)){
isUnique=false;
}
}
currValue=值;
}
返回是唯一的;
}

这个怎么样像这样的东西:

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

return (new HashSet(aMap.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;
    }
//例如,用一个更恰当的名称来思考isAllValuesAreUnique
公共静态布尔值是唯一的(映射aMap){
如果(aMap==null)
返回true;//或抛出IlegalArgumentException()
集合c=aMap.getValues();

return new HashSet(c).size()我知道最初的问题需要Java 5的解决方案,但是如果其他人搜索这个问题的答案不限于Java 5,这里有一个Java 8方法

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

这不能很好地扩展到许多非唯一的元素。@KevinBowersox那么它们显然是不相等的。@davidermann:这不会比我假设的问题中的代码慢。可能
values.size()@NeplatnyUdaj:我也考虑过这一点,但我认为最好只使用
if(aMap.isEmpty())返回true
作为方法中的先决条件。不过,您可以改进自己的方法。由没有名称的\u horse\u建议的代码将完成此任务,但它将创建一个单独的哈希集,并在过程中可能将您的所有值复制到该哈希集中。您只需获取第一个元素并将其与所有其他元素进行比较(foreach循环在这里很有用)直到你找到一个不等于第一个的值。一旦你找到不等于的元素,你就可以跳出循环。
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;
}
return aMap.values().stream().distinct().limit(2).count() < 2