假设您有一个字符串数组 arr ,其中包含3个字符串。要比较其值,您只需执行以下操作:
if (arr[0].equals(arr[1]) && arr[0].equals(arr[2] && arr[1].equals(arr[2]) {
return true;
}
但是如果那个数组有数百个字符串呢?比较所有值的最佳方法是什么?
我想过使用 for循环,但Java不允许在条件中使用循环。有什么想法吗?
答案 0 :(得分:5)
这个1班轮怎么样:
return Arrays.stream(arr).distinct().count() == 1;
此代码整齐地处理空(但不是null)数组,如果为空则返回false
。
如果要在数组为空时返回true
,请将测试更改为:
return Arrays.stream(arr).distinct().count() < 2;
答案 1 :(得分:1)
如果数组可以是任何维度,那么Objects.deepEquals()
method可能会有所帮助:
boolean allEqual = Arrays.stream(arr).allMatch(a -> Objects.deepEquals(arr[0], a));
更好:
boolean allEqual = Arrays.stream(arr, 1, arr.length) // bounds check left
.allMatch(a -> Objects.deepEquals(arr[0], a)); // to the reader :)
测试:
String[][] arr = {
{"a", "a"},
{"a", "a"},
{"a", "a"}};
boolean allEqual = Arrays.stream(arr, 1, arr.length)
.allMatch(a -> Objects.deepEquals(arr[0], a));
System.out.println(allEqual); // true
答案 2 :(得分:0)
for(int i = 0; i < arr.length-1; i++){
if(!arr[i].equals(arr[i+1])){
return false;
}
}
return true;
答案 3 :(得分:0)
执行此操作的强力方法是将第一个字符串与数组中的每个其他字符串进行比较。
public boolean allUnique(String[] arr){
//Assuming the array has at least 1 element.
String s = arr[0];
for(int i = 1; i < arr.length; i++){
if(!arr[i].equals(s)){
return false;
}
}
return true;
}