Björn Ternes
Björn Ternes

Reputation: 1127

In Java, how can I test if an Array contains the same value?

I'm looking for a method to detect if all objects within an array(list) are the same. e. g:

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

Thanks for help

Upvotes: 6

Views: 44258

Answers (9)

parsecer
parsecer

Reputation: 5176

The easiest one:

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;
}

Upvotes: 0

Priidu Neemre
Priidu Neemre

Reputation: 3081

For Java 8, Alexis C's solution is probably the best. However, if you're stuck with <= Java 7 and don't think David Wallace's approach is expressive enough, you could also try this:

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

Basically what this does is that it checks whether the number of elements in your list equal to "1" matches the total number of elements in the list. Pretty straightforward.

By the way -- this is pure Java Collections API, and I believe Collection.frequency(..) has been there since at least JDK 1.5. See the javadocs for more information.

EDIT: Here's a quick fiddle if you want to take this for a test drive.

Upvotes: 1

Alexis C.
Alexis C.

Reputation: 93892

Java 8 solution :

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

Same logic for lists :

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


It comes quite complicated if there are only or any null values in the array (resulting in a NullPointerException). So possible workarounds are:

  • Using Predicate.isEqual, it uses the static method equals from the Objects class and it will do the null check for you before calling equals on the first argument.

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

  • Using distinct() and count() :

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

    that can be improved into Arrays.stream(arr).distinct().limit(2).count() == 1; as there is no need to check the all pipeline's content if you already find 2 distinct elements.

Upvotes: 26

uoftcode
uoftcode

Reputation: 25

You can sort the array and then use the Array equals method:

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

To test it out:

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

Upvotes: 1

JBojan
JBojan

Reputation: 26

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;
}

With this you can check if arraylist2 contains values from arraylist1.

Upvotes: 1

Petr Mensik
Petr Mensik

Reputation: 27536

 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;
 }

Upvotes: 1

Justin Niessner
Justin Niessner

Reputation: 245499

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;
}

Please feel free to correct any syntax mistakes. I fear my Java-fu may be lacking today.

Upvotes: 11

Dawood ibn Kareem
Dawood ibn Kareem

Reputation: 79875

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

Upvotes: 6

peter.petrov
peter.petrov

Reputation: 39477

If your list is empty return true. If not, loop through it and check if all elements are equal to the element at index 0. If so, return true, otherwise return false.

Upvotes: 2

Related Questions