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>)。