我想从字符串创建非字母字符列表,所以我写道:
str.chars()
.mapToObj(c -> (char) c)
.filter(Predicate.not(Character::isAlphabetic))
.toList();
Run Code Online (Sandbox Code Playgroud)
但是,这会引发以下错误消息:
不存在类型变量的实例,因此字符符合整数推断变量 T 具有不兼容的边界:等式约束:整数下限:字符
我没有完全理解错误消息,但我认为这是由于作为参数而不是 charCharacter#isAlphabetic进行替换而导致的,因为替换为(例如),它可以正常工作。int codePointCharacter::isAlphabeticCharacter::isUpperCasechar
现在,如果我写:
str.chars()
.mapToObj(c -> (char) c)
.filter(c -> !Character.isAlphabetic(c))
.toList();
Run Code Online (Sandbox Code Playgroud)
它编译得很好,我什至没有那么惊讶/困惑。但是,如果我写
str.chars()
.mapToObj(c -> (char) c)
.filter(Predicate.not(c -> Character.isAlphabetic(c)))
.toList();
Run Code Online (Sandbox Code Playgroud)
它也编译得很好,这肯定让我感到困惑,因为它Character::isAlphabetic基本上不等于c -> Character.isAlphabetic(c)?好吧,显然并非在所有情况下(因为据我所知,在大多数情况下)
所以我的两个问题是: