gpt4 book ai didi

java - ArrayList 和 Stream 的问题...我必须使用在另一个 ArrayList 中具有属性的元素来流式传输 ArrayList

转载 作者:行者123 更新时间:2023-12-02 08:59:32 25 4
gpt4 key购买 nike

我有列表......现在,我必须流式传输包含产品及其名称和编号的订单列表。我将编写一个简化的代码,因为实际的代码很长

ArrayList<Order> order = new ArrayList<>();
order.add(new Order(011, 579, 1 , true);

ArrayList<Product> prod = new ArrayList<>();
prod.add(new Product(9918, "Nvidia Graphic Card", 1299);

目标是使用 true boolean 值(在本例中意味着已确认)以及这些订单中产品的名称和编号来流式传输订单......

order.stream().filter(e-> e.isConfirmed()).forEach((v) -> System.out.println("\n \t "+ v));

但这只是订单,我不知道如何将产品放入同一个流中......谢谢

最佳答案

这是执行此操作的一种方法,但请注意,这是一种非常无效的解决方案,因为对于每个已确认的订单,它都必须扫描产品列表以查找有效的产品。因此,我强烈建议您考虑使用其他数据结构(例如 Map<Integer, Product> ,它降低了从 O(n) to O(log n) 查找产品的复杂性)来存储产品或更改 Order 。类存储Product (甚至 List<Product> )直接代替存储 productId .

public static void main(String[] args) {
List<Order> orders = new ArrayList<>(List.of(
new Order(1, 1, 5, false),
new Order(2, 2, 5, true),
new Order(3, 3, 7, true),
new Order(4, 1, 1, true),
new Order(5, 2, 3, true),
new Order(6, 3, 5, false)
));

List<Product> products = new ArrayList<>(List.of(
new Product(1, "Product 1", 1.99),
new Product(2, "Product 2", 2.99),
new Product(3, "Product 3", 3.99)
));

String confirmedOrders = orders.stream()
.filter(Order::isConfirmed)
.map(order -> products.stream()
.filter(product -> product.getId() == order.getProductId())
.findFirst()
.map(getOrderSummaryString(order))
.orElseThrow(() -> new IllegalArgumentException(
"Invalid product id (#" + order.getProductId() + ") in order #" + order.getId()))
)
.collect(Collectors.joining(System.lineSeparator()));

System.out.println("Confirmed orders list:" + System.lineSeparator() + confirmedOrders);
}

private static Function<Product, String> getOrderSummaryString(Order order) {
return product ->
"\t Order #" + order.getId() + " of " + order.getQuantity() + " * " + product.getName() +
" ($" + product.getPrice() + ")," + " $" +
String.format("%.2f", product.getPrice() * order.getQuantity());
}

输出:

Confirmed orders list:
Order #2 of 5 * Product 2 ($2.99), $14.95
Order #3 of 7 * Product 3 ($3.99), $27.93
Order #4 of 1 * Product 1 ($1.99), $1.99
Order #5 of 3 * Product 2 ($2.99), $8.97

<强> Live demo

关于java - ArrayList 和 Stream 的问题...我必须使用在另一个 ArrayList 中具有属性的元素来流式传输 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60266164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com