【发布时间】:2018-06-29 16:36:53
【问题描述】:
在isReadyToDeliver 方法中,如果订单中的所有产品都可用 (ProductState.AVAILABLE) 并且如果订单状态已准备好发送 (OrderState.READY_TO_SEND),则方法必须返回 true。
我写了两部分,但我无法将它们组合起来,
我写了return orderState.andThen(productState),但得到这个错误:
Function<Order,Boolean>类型中的方法andThen(Function<? super Boolean,? extends V>)不适用于参数(Function<Order,Boolean>)
public class OrderFunctions {
public Function<Order, Boolean> isReadyToDeliver() {
Function<Order, Boolean> orderState = o -> o.getState() == OrderState.READY_TO_SEND;
Function<Order, Boolean> productState =
o -> o.getProducts()
.stream()
.map(Product -> Product.getState())
.allMatch(Product -> Product == ProductState.AVAILABLE);
return ????? ;
//return orderState.andThen(productState);
//error: The method andThen(Function<? super Boolean,? extends V>) in the type Function<Order,Boolean> is not applicable for the arguments (Function<Order,Boolean>)
}
}
如果需要其他类:
enum OrderState {CONFIRMED, PAID, WAREHOUSE_PROCESSED, READY_TO_SEND, DELIVERED }
enum ProductType { NORMAL, BREAKABLE, PERISHABLE }
public class Order {
private OrderState state;
private List<Product> products = new ArrayList<>();
public OrderState getState() {
return state;
}
public void setState(OrderState state) {
this.state = state;
}
public Order state(OrderState state) {
this.state = state;
return this;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public Order product(Product product) {
if (products == null) {
products = new ArrayList<>();
}
products.add(product);
return this;
}
}
public class Product {
private String code;
private String title;
private ProductState state;
public ProductState getState() {
return state;
}
public void setState(ProductState state) {
this.state = state;
}
public Product state(ProductState state) {
this.state = state;
return this;
}
}
【问题讨论】:
-
您在应该使用谓词的地方使用函数。 docs.oracle.com/javase/8/docs/api/java/util/function/…
-
次要注意:请将代码文本用
`而非**括起来,以使其宽度固定,并且对读者来说明显是代码。
标签: java lambda java-8 functional-programming functional-interface