我有一个用例,我想用特定的正则表达式对集合进行分区,而在分区时我想修改每个字符串。如果我不这样做,我必须再次遍历密钥并进行另一个正则表达式匹配,因为我可以使用正则表达式分组。
如何在Java 8中执行此操作?
答案 0 :(得分:1)
在这种情况下,您可以充分利用Pattern
和Matcher
之间的区别。例如:
Pattern pattern = Pattern.compile("[abcd]*");
List<String> results = myStrings.stream()
.map(pattern::matcher).filter(Matcher::matches)
.map(matcher -> matcher.replaceAll("replacement"))
.collect(Collectors.toList());
如果合适,也可以使用匹配器group
。
答案 1 :(得分:0)
您可以从java.util.stream.Collectors链接某些收藏家,以便制作更复杂的收藏家。以下分区由谓词组成,然后使用函数修改。 虽然请注意仅修改结果数据。
Map<Boolean,List<String>> partitions = strings.stream().collect(
Collectors.partitioningBy( s -> Pattern.matches(regex,s), //predicate
Collectors.mapping( s -> modify(x), //function
Collectors.toList()
)));