错误 return 输入方法参考:java.util.function.Predicate
bad return type in method reference: java.util.function.Predicate
我下面的 Java 8 个测试代码在抱怨。我的理解是,valid 方法的 return 类型是一个 Predicate,其计算结果为布尔值,Stream 中的 filter 方法也需要 Predicate。是我的理解有误吗?谁能帮我解决这个错误
*public class Main{
public static void main(String... args){
Stream.of("12/31/2014",
"01-01-2015",
2016").filter(Main::valid).forEach(s ->
out.println(s));
}
public static Predicate<Boolean> valid(String dt){
return p->dt.length()>0;
}
}*
错误:类型不兼容:方法参考中的错误 return 类型
java.util.function.Predicate 无法转换为布尔值
JDK: 1.8.0_102
IDE:IntelliJ IDEA - 2017.2.5 社区版
感谢您的帮助。
valid
return 类型是 Predicate<Boolean>
但 filter
等待 return 类型是 boolean
的 lambda。所以它应该看起来像(不确定它是否符合您的初始意图):
public class Main{
public static void main(String... args){
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(Main::valid)
.forEach(s ->out.println(s));
}
public static boolean valid(String dt){
return dt.length()>0;
}
}
在其中使用 valid
函数过滤流。
在使用方法引用之前,请尝试编写您需要过滤的lambda。 filter
之前的流是 Stream<String>
类型,因此 lambda 必须采用 String
和 return 和 boolean
(这是任何 Predicate
所必需的).所以它可能看起来像:
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(s -> s.length()>0)
现在你可以尝试找到一个现有的函数来完成这项工作,比如 valid
,然后你可以用 .filter(Main::valid)
.
替换调用
现在如果你有一个方法 returns 你是 Predicate<String>
(因为你的实际流将 String
s 注入谓词)你可以写:
public class Main{
public static void main(String... args){
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(Main::valid())
.forEach(s->out.println(s));
}
public static Predicate<String> valid(){
return s->s.length()>0;
}
}
您在何处注入以过滤通过调用 valid
.
构建的谓词
我下面的 Java 8 个测试代码在抱怨。我的理解是,valid 方法的 return 类型是一个 Predicate,其计算结果为布尔值,Stream 中的 filter 方法也需要 Predicate。是我的理解有误吗?谁能帮我解决这个错误
*public class Main{
public static void main(String... args){
Stream.of("12/31/2014",
"01-01-2015",
2016").filter(Main::valid).forEach(s ->
out.println(s));
}
public static Predicate<Boolean> valid(String dt){
return p->dt.length()>0;
}
}*
错误:类型不兼容:方法参考中的错误 return 类型 java.util.function.Predicate 无法转换为布尔值
JDK: 1.8.0_102 IDE:IntelliJ IDEA - 2017.2.5 社区版
感谢您的帮助。
valid
return 类型是 Predicate<Boolean>
但 filter
等待 return 类型是 boolean
的 lambda。所以它应该看起来像(不确定它是否符合您的初始意图):
public class Main{
public static void main(String... args){
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(Main::valid)
.forEach(s ->out.println(s));
}
public static boolean valid(String dt){
return dt.length()>0;
}
}
在其中使用 valid
函数过滤流。
在使用方法引用之前,请尝试编写您需要过滤的lambda。 filter
之前的流是 Stream<String>
类型,因此 lambda 必须采用 String
和 return 和 boolean
(这是任何 Predicate
所必需的).所以它可能看起来像:
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(s -> s.length()>0)
现在你可以尝试找到一个现有的函数来完成这项工作,比如 valid
,然后你可以用 .filter(Main::valid)
.
现在如果你有一个方法 returns 你是 Predicate<String>
(因为你的实际流将 String
s 注入谓词)你可以写:
public class Main{
public static void main(String... args){
Stream.of("12/31/2014", "01-01-2015", "2016")
.filter(Main::valid())
.forEach(s->out.println(s));
}
public static Predicate<String> valid(){
return s->s.length()>0;
}
}
您在何处注入以过滤通过调用 valid
.