从String到Lambda表达式的整数

时间:2016-04-08 17:45:39

标签: java string integer

我遇到一个小问题,即我希望通过lambda表达式从Integer获取String。我写了小代码,但我只得到单个字符。

示例:

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());};

2 个答案:

答案 0 :(得分:4)

您可以使用以下lambda:

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

答案 1 :(得分:2)

你可以这样做:

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