OrderList - Id,状态,产品列表.
ProductList - Id,名称,类别。
获得一个订单列表,列出属于“婴儿”Java 8类的产品列表
我试过了
orderList.stream().flatMap(prodCat -> prodCat.getProduct().stream())
.filter(cat -> cat.getCategary()=="Baby").forEach(System.out::println);
它只返回产品类型的列表。我正在寻找退货单。
发布于 2022-03-01 06:51:29
如果您正在寻找具有特定类别的某些产品的订单,可以在anyMatch()
中使用filter()
,如下所示:
orderList.stream()
.filter(o -> o.getProducts()
.stream()
.anyMatch(p -> p.getCategory().equals("Baby")))
.forEach(System.out::println);
发布于 2022-03-01 10:12:41
如果要作为List
获得流管道的执行结果,则应该使用collect()
作为终端操作,使用Collectors.toList()
作为参数。
或者,作为Java 16以后可用的另一种选择,您可以使用toList()
作为终端操作,它返回一个不变的列表。
下面的方法迭代orders的列表,并为其products列表中包含至少一个给定类别的产品的对象创建一个新的Order
实例,否则,E 115
orderE 216
将被丢弃。然后将订单收集到新的列表中。
public static List<Order> getOrdersOfCategory(List<Order> orderList, String category) {
return orderList.stream()
.map(order -> getNewOrderOfCategory(order, category)) // creating a new Order object that contains a filtered List of products
.filter(Optional::isPresent) // removing the orders that have no products of a given category at all
.map(Optional::get)
.collect(Collectors.toList());
}
下面的方法的职责是创建Order
类的新实例。它们中的每一个都将与经过过滤的产品列表相关联。
此方法返回的结果类型为Optional<Order>
,以便表示过滤后的产品列表为空并丢弃订单的情况。
public static Optional<Order> getNewOrderOfCategory(Order order, String category) {
List<Product> filteredProducts = getProductsOfCategory(order.getProduct(), category);
return filteredProducts.isEmpty() ? Optional.empty() : // no target products
new Order(order.getId(),
order.getStatus(),
filteredProducts);
}
该方法用于从给定列表中提取给定类别的产品。
public static List<Product> getProductsOfCategory(List<Product> products, String category) {
return products.stream()
.filter(prod -> prod.getCategary().equals(category))
.collect(Collectors.toList());
}
Note
不要将对象与双等号进行比较,始终使用方法instead;
发布于 2022-03-01 16:42:28
除了字符串之间的equals
之外,您的代码是正确的。注意:
这个等式是false,因为它比较了引用:
"Baby" == new String("Baby")
这个等式是true,因为它比较了以下值:
"Baby".equals(new String("Baby"))
这是最后的结果:
orderList.stream()
.flatMap(prodCat -> prodCat.getProduct().stream())
.filter(cat -> "Baby".equals(cat.getCategary()))
.forEach(System.out::println);
https://stackoverflow.com/questions/71304656
复制相似问题