繁体   English   中英

用于比较数组的所有字符串值的循环

[英]A loop to compare all string values of an array

假设你有一个包含3个字符串的字符串数组arr 要比较其值,您只需执行以下操作:

if (arr[0].equals(arr[1]) && arr[0].equals(arr[2] && arr[1].equals(arr[2]) {
    return true;
}

但是如果那个数组有数百个字符串呢? 比较所有值的最佳方法是什么?

我想过使用for循环,但Java不允许在条件内循环。 有任何想法吗?

这个1班轮怎么样:

return Arrays.stream(arr).distinct().count() == 1;

此代码整齐地处理空(但不是null)数组,如果为空则返回false

如果要在数组为空时返回true ,请将测试更改为:

return Arrays.stream(arr).distinct().count() < 2;

如果数组可以是任何维度,那么Objects.deepEquals()方法可能会有所帮助:

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
for(int i = 0; i < arr.length-1; i++){
    if(!arr[i].equals(arr[i+1])){
        return false;
    }
}
return true;

执行此操作的强力方法是将第一个字符串与数组中的每个其他字符串进行比较。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM