簡體   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