2016-11-30 20 views
1

我想看看我的數組中的元素是否包含在我的其他數組之一。我不想爲此使用嵌套for循環,我很好奇爲什麼我的.contains不起作用。試圖比較兩個陣列與Arrays.contains Java

目前我有兩個數組

double [] s2 = new double [4]; 
double [] match = new double [s2.length]; 

,我試圖測試是否s2包含任何值在我match陣列

for (j = 0; j < s2.length; j++) 
     { 
      if(Arrays.asList(s2).contains(match[j])){ 
       return true; 
      } 
     } 

這是否有些事情要與雙數據類型我在用?如果有的話,我仍然可以使用.contains

+0

http://stackoverflow.com/a/30251235/1553851 – shmosel

+0

任何具體的原因,你不要不想使用嵌套循環? – shmosel

+0

你*是*使用嵌套循環,你只是通過'contains'間接使用(並且你在每次傳遞時爲's2創建一個新的列表包裝器)。 – chrylis

回答

2

解決的具體問題:Arrays.asList沒有創建元素的ListList只有一個值的:你的元素(位於索引0)double[]。您應該自己迭代第二個for循環,而不是創建不同的對象。


它可以與Stream操作(),而不是使用循環來完成,但差異應該不大。

DoubleStream.of(s2)  // Pipe the source array 
    .distinct()   // Remove duplicate elements 
         // as they only need to be matched against once 
    .anyMatch(value -> // Consider if any value matches this condition 
     IntStream.of(match) // It equals any value in "match" 
       .distinct() // after removing duplicate elements 
       .anyMatch(matchValue -> matchValue == value)); 

有關流的附加信息 - 看到這些甲骨文的文章:處理數據的Java SE 8流Part 1Part 2

1

問題是Arrays.asList(s2)不會像您期望的那樣返回List<Double>對象。

它返回一個List<double[]>對象。所以該數組內的元素將是double[]

泛型不適用於原始類型。

解決方案是將double[]轉換爲Double[]的某處。

+0

作爲解決方案,用戶應該使用'陣列。 asList'。 – Unihedron

+0

@Unihedron不起作用。 asList不會接受'double []'這種方式。編譯錯誤:) – Thihara

+0

啊你是對的,我錯誤的認爲參數會適應。我的錯! – Unihedron