在isBigOrder
方法中,如果订购的产品总和价格大于1000,则必须返回true。如何使用Java 8编写它?我写了总和部分,但无法完成。
public Function<Order, Boolean> isBigOrder() {
Function<Order, Optional<Long>> sum = a -> a.getProducts()
.stream()
.map(P -> P.getPrice())
.reduce((p1,p2)->p1+p2);
Predicate <Optional<Long>> isBig = x -> x.get() > 1000 ;
return ????;
}
如果需要其他类:
enum OrderState { CONFIRMED, PAID, WAREHOUSE_PROCESSED, READY_TO_SEND, DELIVERED }
enum ProductType { NORMAL, BREAKABLE, PERISHABLE }
public class Product {
private String code;
private String title;
private long price;
private ProductState state;
private ProductType type;
//all fields have getter and setter
public Product price(long price) {
this.price = price;
return this;
}
}
public class Order {
private String code;
private long price;
private String buyyer;
private OrderState state;
private List<Product> products = new ArrayList<>();
//all fields have getter and setter
public Order price(long price) {
this.price = price;
return this;
}
public Order product(Product product) {
if (products == null) {
products = new ArrayList<>();
}
products.add(product);
return this;
}
}
参考方案
您不需要Predicate
。只需计算总和并检查它是否> 1000。
public Function<Order, Boolean> isBigOrder() {
return o -> o.getProducts()
.stream()
.mapToLong(Product::getPrice)
.sum() > 1000;
}
或者,正如Holger所评论的那样,当您想通过返回Predicate
的单个参数实现函数时,boolean
接口是更合适的功能接口:
public Predicate<Order> isBigOrder() {
return o -> o.getProducts()
.stream()
.mapToLong(Order::getPrice)
.sum() > 1000;
}
在Java Eclipse项目中存储XSD文件的约定 - java在Java Eclipse项目中用于存储.xsd文件的常规文件夹是什么?例如,.jars保留在/lib中。 .xsd文件将存储在哪里? 参考方案 我通常将XML模式放在/src/main/resources/XSD中,但是正如从JAXB project中可以看到的那样,它们通常被放在具有最相关包的深层源文件夹中。
在Java Swing中输入JButton的键焦点? - java如何在Java Swing中使JButton的Enter键成为焦点?我已经这样做了btn_Login.registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("enter key pre…
Diamond运算符(<>)在Java 1.7中不起作用 - java编译jsp文件时出现以下错误: 低于1.7的源级别不允许使用''运算符我正在使用jdk 1.7.x和eclipse Kepler另外我已经在Eclipse的项目首选项中设置了1.7 as compliance level,但是代码仍然无法正常工作我应该添加其他配置吗? 参考方案 检查Eclipse中的以下区域:Right Click Project >…
在Java 8中,为什么ArrayList的默认容量现在为零? - java我记得,在Java 8之前,ArrayList的默认容量为10。出乎意料的是,对默认(无效)构造函数的评论仍然显示:Constructs an empty list with an initial capacity of ten.来自ArrayList.java:/** * Shared empty array instance used for defau…
Java:我可以在Hashmaps中使用数组吗? - java我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();