【发布时间】:2019-08-07 04:20:01
【问题描述】:
我是 Java 8 的新手,我正在尝试使用谓词和函数。我有我的 pojo 类 Product,它有 Long Id , String 类别。我创建谓词 fruits & Drinks 分别检查 1000 到 2000 和 3000 到 4000 之间的 Id。
我还创建了一个函数,它将产品对象的类别设置为“水果”/“饮料”。现在要检查我在条件语句中使用谓词的产品的 id 范围,当相同的代码放在 if/else 块中时,它向我显示错误为“多个标记”,绝对按预期工作
//谓词
Predicate <Product> checkFruitsLimitProduct = (product) -> product.getId().intValue() >= 1000 && product.getId().intValue() < 2000;
Predicate <Product> checkDrinksLimitProduct = (product) -> product.getId().intValue() >= 3000 && product.getId().intValue() < 4000;
//带条件语句的函数
Function <Product, Product> setCategory = (product) -> {
checkFruitsLimitProduct.test(product) ? product.setCategory("Fruits") : checkDrinksLimitProduct.test(product))?
product.setCategory("YS") : product.setCategory("YS");
return product;
};
//带有If/else块的函数,效果很好
Function <Product, Product> setCategory = (product) -> {
if(checkFruitsLimitProduct.test(product)) {
product.setCategory("Fruits") ;
}else if(checkDrinksLimitProduct.test(product)) {
product.setCategory("Drinks");
}else {
product.setCategory("YS");
}
return product;
};
//打印函数值
Product p1 = new Product(1000L);
Product p2 = new Product(3000L);
System.out.println(setCategory.apply(p1));
System.out.println(setCategory.apply(p2));
条件语句错误为:线程“main”java.lang.Error 中的异常:未解决的编译问题
【问题讨论】:
-
您正在尝试运行无法编译的代码。不要那样做。 阅读编译错误消息并修复它们。一旦所有的东西都修复好了,那么你就应该开始运行你的代码了。
-
@JBNizet,实际上我不确定修复在哪里。相同的代码在 If/Else 中可以正常工作,而在条件语句中则不行。
-
这就是为什么你需要从编译器读取错误信息。它告诉我们哪里出了问题,哪里出了问题。
-
你的缩进是一团糟。你能解决它吗?
标签: java function java-8 conditional-statements predicate