【发布时间】:2022-06-16 18:54:16
【问题描述】:
我正在使用 java 流 api。在代码中,我有两个类Order 和Product。多个产品与单个订单相关联。它们之间的关系在组成上是OnetoMany。当我试图获取所有具有“婴儿”类别的产品并打印订单列表时。我完全重复订单,但在获取产品时,获取[Product@123a439b, Product@5e265ba4, Product@156643d4, Product@7de26db8]。我想这个打印内存地址但是我想打印产品列表。
下面是我的代码:
class Order {
private Long id;
private LocalDate orderDate;
private LocalDate deliveryDate;
private String status;
Set<Product> products;
// constructor, getter and setter
}
class Product {
private Long id;
private String name;
private String category;
private Double price;
// constructor, getter and setter
}
public class Association {
public static void main(String[] args) {
Set<Product> book = new HashSet<>();
book.add(new Product(1001L, "Zero To One", "Books", 245.00));
book.add(new Product(1003L, "Life Is What You Make It", "Books", 98.00));
Set<Product> appliance = new HashSet<>();
appliance.add(new Product(1002L, "Better Photography", "Home Appliances", 100.00));
Set<Product> baby = new HashSet<>();
appliance.add(new Product(1006L, "Himalaya Baby Powder", "Baby", 120.00));
appliance.add(new Product(1007L, "Himalaya Baby Shampoo", "Baby", 208.00));
Set<Order> order = new HashSet<>();
order.add(new Order(1100L, LocalDate.parse("2022-02-08"), LocalDate.parse("2022-02-13"), "delivered", book));
order.add(new Order(1100L, LocalDate.parse("2022-03-10"), LocalDate.parse("2022-03-15"), "pending", appliance));
order.add(new Order(1100L, LocalDate.parse("2022-03-10"), LocalDate.parse("2022-03-15"), "pending", baby));
order.stream().filter(o -> o.getProducts().stream().anyMatch(p -> p.getCategory().equals("Baby")))
.forEach(p -> System.out.println(p.getId() + " " + p.getOrderDate() + " " + p.getDeliveryDate() + " " + p.getStatus() + " " + p.getProducts()));
}
}
这是我的输出:
1100 2022-03-10 2022-03-15 pending [Product@123a439b, Product@5e265ba4, Product@156643d4, Product@7de26db8]
【问题讨论】:
-
产品应该是什么样的?一旦你决定了,你就必须在
Product类中实现一个toString()方法。
标签: java java-8 java-stream composition