【发布时间】:2021-10-22 03:36:36
【问题描述】:
我使用 Java 8,我有一个字符串列表,我想提取匹配(或不匹配)正则表达式的字符串:
switch (condition) {
case "A":
return myListOfString.stream().filter(myString -> myString.matches(myRegex)).findFirst();
case "B":
return myListOfString.stream().filter(myString -> !myString.matches(myRegex)).findFirst();
}
这两种情况下的代码完全相同,除了!“NOT”。我想根据条件提取匹配正则表达式的字符串或不匹配正则表达式的字符串。我确信可以在同一个流中使用 Predicate 执行此操作,但我不知道如何操作。
有没有一种方法可以做到这一点,而无需在一个流中复制代码?
【问题讨论】:
-
这里有
Pattern::asPredicate可能对你有帮助 -
你正在使用一个开关,但把它当成是。
Predicate p = myString -> myString.matches(myRegex);然后测试你的情况。if( caseB ){ p = Predicate.not(p);}然后流/过滤器返回。你不会有任何重复。 -
@Nono "我以前不知道 partitioningBy" 你知道有一个东西叫 Javadoc,对吧?
标签: java functional-programming java-stream predicate