在Java中,如何测试Array是否包含相同的值?

时间:2014-01-16 19:05:07

标签: java arrays

我正在寻找一种方法来检测数组(列表)中的所有对象是否相同。 即G:

arraylist1 = {"1", "1", "1", "1"} // elements are the same
arraylist2 = {"1", "1", "0", "1"} // elements are not the same

感谢您的帮助

9 个答案:

答案 0 :(得分:20)

Java 8解决方案:

boolean match = Arrays.stream(arr).allMatch(s -> s.equals(arr[0]));

列表的逻辑相同:

boolean match = list.stream().allMatch(s -> s.equals(list.get(0)));

<小时/> 如果数组中只有或null个值(导致NullPointerException),则会非常复杂。所以可能的解决方法是:

  • 使用Predicate.isEqual,它使用equals类中的静态方法Objects,它会在第一个参数上调用equals之前为你做空检查。

    boolean match = Arrays.stream(arr).allMatch(Predicate.isEqual(arr[0]));
    boolean match = Arrays.stream(arr).allMatch(s -> Objects.equals(arr[0], s));

  • 使用distinct()count()

    boolean match = Arrays.stream(arr).distinct().count() == 1;

    可以改进为Arrays.stream(arr).distinct().limit(2).count() == 1;,因为如果您已找到2个不同的元素,则无需检查所有管道的内容。

答案 1 :(得分:11)

public static boolean AreAllSame(String[] array)
{
    boolean isFirstElementNull = array[0] == null;
    for(int i = 1; i < array.length; i++)
    {
        if(isFirstElementNull)
            if(array[i] != null) return false;
        else 
            if(!array[0].equals(array[i])) return false;
    }

    return true;
}

请随时纠正任何语法错误。我担心我的Java-fu今天可能缺乏。

答案 2 :(得分:6)

if( new HashSet<String>(Arrays.asList(yourArray)).size() == 1 ){
    // All the elements are the same
}

答案 3 :(得分:2)

如果您的列表为空,则返回true。 如果没有,循环遍历它并检查所有元素是否等于索引0处的元素。 如果是,则返回true,否则返回false。

答案 4 :(得分:1)

 public boolean containsSameValues(int[] array) {
     if(array.length == 0) {
         throw new IllegalArgumentException("Array is empty");
     }
     int first = array[0];
     for(int i=0;i<array.length;i++) {
         if(array[i] != first) {
             return false;
         }
      }
      return true;
 }

答案 5 :(得分:1)

boolean containsAllValues=false;
boolean t=false;
int isto=0; 
for(int k=0;k<arraylist1.size();k++){
   for(int n=0;n<arraylist2.size();n++){
       if(arraylist1.get(k).equals(arraylist2.get(n))){
           t=true;
       }
   }
   if(t){
       isto++;
   }else{
       isto=0;
       break;
   }
}
if(isto!=0){
   containsAllValues=true;
}

使用此方法,您可以检查arraylist2是否包含arraylist1的值。

答案 6 :(得分:1)

您可以对数组进行排序,然后使用Array equals方法:

public boolean equalArrays(int []f ,int [] g){
        Arrays.sort(f);
        Arrays.sort(g);
        if (Arrays.equals(f, g))
             return true;
        return false;
}

测试一下:

         int [] h={1,1,0,1};
         int [] t={1,1,1,0};
         System.out.println(cc.equalArrays(h,t));

答案 7 :(得分:1)

对于Java 8,Alexis C的解决方案可能是最好的。但是,如果您坚持使用&lt; = Java 7并且不认为David Wallace的方法足够表达,您也可以尝试这样做:

boolean result = Collections.frequency(yourList, "1") == yourList.size();

基本上它的作用是检查列表中元素的数量是否等于&#34; 1&#34;匹配列表中的元素总数。非常直截了当。

顺便说一句 - 这是纯Java Collections API,我相信Collection.frequency(..)至少已经存在JDK 1.5。有关详细信息,请参阅javadocs

编辑:如果您想将其用于试驾,请quick fiddle

答案 8 :(得分:0)

最简单的一个:

public static boolean checkTheSame(int[] numbers)  {
   for (int i = 0; i < numbers.length - 1; i++)  {
       if (numbers[i] != numbers[i + 1])  {
           return false;
       }
   }

   return true;
}