我正在寻找一种方法来检测数组(列表)中的所有对象是否相同。 即G:
arraylist1 = {"1", "1", "1", "1"} // elements are the same
arraylist2 = {"1", "1", "0", "1"} // elements are not the same
感谢您的帮助
答案 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;
}