有必要确定这个订单是否可以完成:每种产品的库存是否足够。我不知道如何使用流
比较列表class Product {
private String name;
private int amount;
public Product(String name, int amount) {
this.name = name;
this.amount = amount;
}
}
class Order {
private String name;
private int amount;
public Order(String name, int amount) {
this.name = name;
this.amount = amount;
}
}
class TestWarehouse {
public static void main(String[] args) {
Product apple = new Product("apple", 3);
Product juice = new Product("juice", 2);
Product milk = new Product("milk", 4);
Order order1 = new Order("apple", 3);
Order order2 = new Order("juice", 3);
Order order3 = new Order("milk", 5);
List<Order> orderList = new ArrayList<>(List.of(order1, order2, order3));
List<Product> productList = new ArrayList<>(List.of(apple, juice, milk));
// orderList.stream()
// .filter()
// .anyMatch()
}
}
您可以首先创建包含Collectors.groupingBy
的每种产品的数量的Map
。然后,遍历所有订单并比较金额。
Map<String, Integer> freq = productList.stream().collect(
Collectors.groupingBy(Product::getName, Collectors.summingInt(Product::getAmount)));
orderList.stream().forEach(order -> {
boolean works = freq.getOrDefault(order.getName(), 0) >= order.getAmount();
System.out.println(works); // or do anything else
});
或者,如果productList
中的每个Product
都有一个唯一的名称,那么使用Collectors.toMap
更简单。
Map<String, Integer> freq = productList.stream().collect(
Collectors.toMap(Product::getName, Product::getAmount));