【发布时间】:2021-03-22 21:56:25
【问题描述】:
我尝试将模式中的预测应用于字符串流:
final var someString = "first\nsecond\nthird"
final var myPattern = java.util.regex.Pattern.compile("second");
final var sb = new java.lang.StringBuilder();
someString.lines()
.takeWhile(not(myPattern::asMatchPredicate))
.forEachOrdered(sb::append)
;
但是编译器拒绝了这个错误:
method asMatchPredicate in class java.util.regex.Pattern cannot be applied to given types
required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
但是为什么呢?谓词接受一个字符串 (Predicate<String>),takeWhile 方法需要一个 Predicate<? extends String>。
【问题讨论】:
-
试试
.takeWhile(not(myPattern.asMatchPredicate()))。