具有列表值的Java Map,在另一个列表上过滤

问题描述 投票:0回答:2

我看过其他主题,但是找不到解决我问题的方法。我有一个包含键= 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

有什么想法吗?谢谢!

java arraylist filter stream hashmap
2个回答
0
投票

如果您要在列表中查找包含产品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谓词。


0
投票

这是您想要的吗?

List<OrderLineDTO> orders = allCarts.values()
                .stream()
                .flatMap(List::stream)
                .filter(a->cart.contains(a.getProductId()))
                .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.