2017-09-02 65 views
2

下面的while循環可以轉換爲IntStream嗎?這可以轉換爲IntStream嗎?

這裏modifiedNumberint。我想重構這個到java8。

while (modifiedNumber > 0) { 
    tempNumber = (int) ((modifiedNumber % 10) * Math.pow(10, count)); 
    alist.add(tempNumber); 
    modifiedNumber = modifiedNumber/10; 
    count++; 
} 
+0

你可以加入到問題中,你究竟想用上面的代碼來做什麼?您是否想要反轉一個數字> – nullpointer

+0

不,我只是想用十進制數值來分割數字。所以像123是3,20,100 – user3310115

回答

0

嘛,不是很確定用於共享你的代碼中使用的變量的聲明,但改造上面的代碼中使用IntStream,你可以嘗試類似的信息(聲明礦):

final int[] modifiedNumber = {123}; 
final int len = String.valueOf(modifiedNumber[0]).length(); 
ArrayList<Integer> aList = new ArrayList<>(); 
final int[] count = {0}; 
IntStream.range(0,len).forEach(mn -> { 
    double pow = Math.pow(10, count[0]); 
    int tempNumber = (int) ((modifiedNumber[0] % 10) * pow); 
    aList.add(tempNumber); 
    modifiedNumber[0] = modifiedNumber[0]/10; 
    count[0]++; 
}); 

System.out.println(aList); 

注意:大多數整數值被轉換爲最終的單值數組,以便在流中使用。

+0

所以基於這個,在這種情況下使用流是否有意義? – user3310115

+0

@ user3310115使用流的效率主要是當您想要平行地執行options時。很好的閱讀for each和vs: - https://stackoverflow.com/a/16635489/1746118 – nullpointer

0

這是一個可行的方法。您也可以將多個數字傳遞給Stream.of(),輸出結果將成爲解析所有這些數字的流。

final Stream<Integer> integerStream = Stream.of(modifiedNumber).flatMap(n -> { 
    final List<Integer> aList = new LinkedList<>(); 

    int tempNumber, count = 0; 

    while (n > 0) { 
     tempNumber = (int) ((n % 10) * Math.pow(10, count)); 
     aList.add(tempNumber); 
     n = n/10; 
     count++; 
    } 

    return aList.stream(); 
}); 
相關問題