2014-10-11 88 views
11

我目前在學習如何使用Java,而且我的朋友告訴我,使用Java 8時可以簡化這段代碼。他指出parseIntArray可以被簡化。你將如何在Java 8中做到這一點?使用Java 8將字符串數組轉換爲int數組的最簡單方法是什麼?

public class Solution { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     String[] tokens = input.nextLine().split(" "); 
     int[] ints = parseIntArray(tokens); 
    } 

    static int[] parseIntArray(String[] arr) { 
     int[] ints = new int[arr.length]; 
     for (int i = 0; i < ints.length; i++) { 
      ints[i] = Integer.parseInt(arr[i]); 
     } 
     return ints; 
    } 
} 

回答

30

例如:

static int[] parseIntArray(String[] arr) { 
    return Stream.of(arr).mapToInt(Integer::parseInt).toArray(); 
} 

所以採取String[]Stream。使用mapToInt爲每個元素調用Integer.parseInt並轉換爲int。然後只需在結果IntStream上撥打toArray即可返回數組。

+0

哇!這是Java嗎?當然,這比我的解決方案更加整潔。感謝您的快速響應! – 2014-10-11 10:17:50

+1

@IervinDenzelTorcuato Java 8,是的。 – 2014-10-11 10:18:28

+0

'Integer :: parseInt'什麼'::'在這裏工作? – 2014-10-11 10:31:32

18

您可能跳過創建令牌String[]數組:

Pattern.compile(" ") 
     .splitAsStream(input.nextLine()).mapToInt(Integer::parseInt).toArray(); 

Pattern.compile(" ")結果可以被記住並重復使用,當然。

+3

哇,漂亮。不知道'splitAsStream'。 – 2014-10-11 10:25:17

1

你可以,也直接從拆分,獲得數組:

String input; //Obtained somewhere 
... 
int[] result = Arrays.stream(input.split(" ")) 
     .mapToInt(Integer::valueOf) 
     .toArray(); 

這裏,Arrays有一些不錯的方法來獲得從數組流,這樣你就可以直接在電話拆呢。之後,撥打mapToIntInteger::valueOf以獲得您所需的int數組的IntStreamtoArray

相關問題