我遇到一个小问题,即我希望通过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());};
答案 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())