2016-03-06 17 views
2

我期待有花車(雙打)&整數如下數組 -爪哇 - 原始雙數組轉換成集合

double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961, 828, 199858, 37325.3}; 

然後我有這個函數,返回最大&分鐘

public static void getMaxArrVal(double[] myArr) {   

     myCol = /* Code to convert myarr to collection should come here */ 
     System.out.println(Collections.min(myCol)); 
     System.out.println(Collections.max(myCol)); 
    } 
} 

getMaxArrVal(myArr); 

我在將原始數據類型轉換爲集合時遇到了問題。我嘗試將此轉換爲雙列表,試圖通過將myArr轉換爲char/String來檢查一些東西,但沒有任何工作明顯。

我不斷看到原始數據類型的編譯錯誤。我也嘗試過Double,但沒有運氣。

我怎麼可能將數組轉換爲集合&這個計算最小/最大值。我會很感激任何幫助她請。

+1

檢查此http://stackoverflow.com/questions/5178854/convert-a -double-array-to-double-arraylist#5178920 – prasad

+0

@prasad是正確的;這個問題本質上是一個確切的重複。 – bcsb1001

回答

2

這與Java 8很好地工作:

Arrays.stream(myArr).boxed().collect(Collectors.toCollection(ArrayList::new)); 

當然,可以使用任何Collection而不是ArrayList。我在這裏的代碼實際上可以簡化爲Collectors.toList()

此外,如@nukie's answer,DoubleStream中所述,它有其自己的min()max()方法,使得轉換無效。僅使用使用Arrays.stream(myArr)創建的兩個流並調用這些方法。

+0

非常感謝。這有助於 – usert4jju7

2

番石榴配備了很好的解決方案

Lists.newArrayList(double[]) 
1

,如果你在java8運行這段代碼,你可以嘗試lambda表達式:

Arrays.stream(myArr).max(); 

Arrays.stream(myArr).max(); 
+0

請檢查您的拼寫,以及您的代碼。這是行不通的,因爲像生成的'DoubleStream'這樣的原始流不會在'collect()'方法中接受'Collector'。流不是拼寫。 – bcsb1001

+0

謝謝你的評論!這對我來說是意外的,DoubleStream不提供收集(收集器)方法) – nukie

+1

它沒有多大意義,因爲'收集器是通用的,你不能有'收集器'。儘管如此,我們都希望這樣的事情有時可能會發生。 – bcsb1001

1
double[] primitives = new double[] { 1.0, 2.0, 3.0}; 
List<Double> objects = new ArrayList<>(); 
for(double num : primitives) { 
    objects.add(num); 
} 
1
public static void main(String[] args) throws Exception { 

    Double [] myArr = {0., 0., 95., 9.5, 19., 610.5, 1217., 5.14, 4038.66, 10.23, 7961., 828., 199858., 37325.3};  

    Double min = Arrays.stream(myArr).min(Comparator.<Double>naturalOrder()).get(); 
    Double max = Arrays.stream(myArr).max(Comparator.<Double>naturalOrder()).get(); 

    System.out.println(min); 
    System.out.println(max); 
} 

如果您不需要收集任何東西,除了發現maxmin,直接從數組創建流。在這種情況下,你根本不需要創建單獨的集合。

+0

不要忘記'Stream'對象只能使用一次。只需使用'Arrays.stream(myArr)'兩次... –

+0

嘗試運行您的代碼。 –

+1

@YassinHajaj我做到了。你說得對。感謝您的評論。 –

1

使用Arrays.sort會按升序對數組進行排序。因此,您知道min將是數組的第一個元素myArr [0],並且max將是數組myArr [myArr.length-1]中的最後一個元素。

double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961, 828, 199858, 37325.3}; 
Arrays.sort(myArr); 
System.out.println(myArr[0]); 
System.out.println(myArr[myArr.length-1]); 

下面將導致

0.0 < - 分鐘

199858.0 < - 最大

+1

這種方法會改變原始數組的順序。但是,如果OP不在乎 - 完美的解決方案。 –

+0

謝謝Mike。我需要數組順序保持不變。 – usert4jju7