我看过其他主题,但是找不到解决我问题的方法。我有一个包含键= cartID的地图,例如C01和产品的ArrayList。我想在另一个包含productID的ArrayList上过滤此映射,以便找到包含这些产品的所有购物车。我有以下代码
Map<String, List<OrderLineDTO>> allCarts //contains data these are fetched
List<String> cart; //also contains fetched data for example ["Product01", "Product02"]
allCarts.values().stream().filter(list -> list.stream().allMatch(value -> cart.contains(value.getProductId()))).collect(Collectors.toList()); //filter I'm using but not working
有什么想法吗?谢谢!
如果您要在列表中查找包含产品only的购物车的ID,则应该可以使用:
List<String> cartIds = allCarts
.entrySet().stream()
.filter(e ->
e.getValue().stream().allMatch(p -> productIds.contains(p.getProductId())))
.map(e -> e.getKey())
.collect(Collectors.toList());
所以唯一的区别是我使用entrySet()
而不是values()
。
要查找列表中至少包含一种产品的购物车,需要使用.anyMatch
谓词。
这是您想要的吗?
List<OrderLineDTO> orders = allCarts.values()
.stream()
.flatMap(List::stream)
.filter(a->cart.contains(a.getProductId()))
.collect(Collectors.toList());