是否存在更好的方法來解析字符串中使用流比這個整數的Java 8流解析爲整數
String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).mapToInt(x -> Integer.parseInt(x))
.boxed().collect(Collectors.toList());
是否存在更好的方法來解析字符串中使用流比這個整數的Java 8流解析爲整數
String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).mapToInt(x -> Integer.parseInt(x))
.boxed().collect(Collectors.toList());
可以消除一個步驟,如果你直接解析字符串爲整數:
String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).map(Integer::valueOf)
.collect(Collectors.toList());
或者你可以堅持的基本類型,它提供更好的性能,通過創建一個int
陣列,而不是一個List<Integer>
:
int[] elements = Arrays.stream(line.split(" ")).mapToInt(Integer::parseInt).toArray();
您還可以
Pattern.compile(" ").splitAsStream(line)
更換
Arrays.stream(line.split(" "))
我不知道哪個更有效,雖然。
有做一個更多的方式,將可由於Java-9通過Scanner#findAll
:
int[] result = scan.findAll(Pattern.compile("\\d+"))
.map(MatchResult::group)
.mapToInt(Integer::parseInt)
.toArray();
嗨尤金!我已經看到你用這種方法至少回答了一個類似的問題。你能不能請解釋爲什麼你需要在返回的流中使用'map(MatchResult :: group)'?我的意思是,我知道我可以找到文檔並找出來,但如果你稍微解釋一下這個方法,對未來的讀者來說可能會更好。謝謝! –
我無法看到包含空格分隔整數的行在哪裏被解析。你能指出掃描儀從字符串中讀取嗎? – tucuxi
@FedericoPeraltaSchaffner它是正則表達式中第一個匹配的組...,索引爲'0'。這就是你使用group()時得到的結果。如果你需要另一個組,你可以使用'group(n)'。總是歡迎你 – Eugene
你100%確保輸入的字符串包含空格分開的東西,可以每個被解析到一個' int'?如果失敗會怎樣?那麼應該發生什麼? – Jubobs