2016-04-08 54 views
0

我有一個小問題,即我想通過lambda表達式從String獲得Integer。我寫了小代碼,但我只得到單個字符。通過Lambda表達式從字符串整數

例子:

String = "He11o W00rld" 

我得到[1, 1, 0, 0]但我想[11, 00]。有沒有解決方案?

我的代碼:

Function<String, List<Integer>> collectInts = f -> { 
    return f.chars() 
      .filter(s -> (s > 47 && s < 58)) 
      .map(r -> r - 48) 
      .boxed() 
      .collect(Collectors.toList());}; 
+0

你需要lambda表達式做任何特別的原因? –

+0

是的,我必須做這個練習... – Patrykos

+1

看看['Pattern#splitAsStream()'](https://docs.oracle.com/javase/8/docs/api/java/util/regex /Pattern.html#splitAsStream-java.lang.CharSequence-) –

回答

2

你可以這樣做:

Stream.of(f.split("[^\\d]+")) 
    .filter(s -> !s.isEmpty()) // because of the split function 
    .map(Integer::parseInt) 
    .collect(toList()) 
+0

非常感謝您的解決方案! – Patrykos

4

您可以使用以下拉姆達:

Function<String, List<Integer>> collectInts = s -> 
    Pattern.compile("[^0-9]+") 
      .splitAsStream(s) 
      .filter(p -> !p.isEmpty()) 
      .map(Integer::parseInt) 
      .collect(Collectors.toList()); 

這裏使用Pattern.splitAsStream()流發生器,它通過正則表達式拆分給定輸入。然後檢查每個零件是否爲空,並轉換爲Integer

此外,如果你需要的00代替0,你不應該解析數(跳過Integer::parseInt映射,並收集到List<String>)。

相關問題