Сompare List<Order> <Product> with List using StreamAPI



有必要确定这个订单是否可以完成:每种产品的库存是否足够。我不知道如何使用流

比较列表
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));

相关内容

最新更新