猿问

如何使用 Java 8 流过滤 Hashmap 以动态更新值?

我有一个场景,我不确定过滤哈希图和更新同一映射的有效方法是什么。这是我的哈希图; Map<Double, List<Product>> mappedProducts = new HashMap<>(); 我已经用某种方法将mappedProducts 中的键和值放在了一起。现在,在另一种方法中,我尝试根据我的键值是否大于产品的属性权重来过滤产品列表。这就是我所做的,虽然它工作得很好,但我不确定这是否是最有效和最高效的方法。看看下面的代码;


this.mappedProducts.entrySet().stream().filter(packList ->{

        mappedProducts.put(packList.getKey(), packList.getValue().stream().filter(pack ->{

                if(pack.getWeight() <= packList.getKey())

                    return true;

                return false;

        }).collect(Collectors.toList()));

        return true;

    }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

System.out.println("Filtered Products"+mappedProducts);

还有其他更好的方法来完成这项工作吗?


米脂
浏览 94回答 1
1回答

摇曳的蔷薇

如果您想要过滤后的新地图:保留所有产品的权重均小于键的条目Map<Double,&nbsp;List<Product>>&nbsp;filtered&nbsp;=&nbsp;mappedProducts.entrySet() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(packList&nbsp;->&nbsp;packList.getValue().stream().allMatch(pack&nbsp;->&nbsp;pack.getWeight()&nbsp;<&nbsp;packList.getKey())) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toMap(Map.Entry::getKey,&nbsp;Map.Entry::getValue));如果要修改主图:删除其中一种产品的权重高于键的所有条目mappedProducts.entrySet() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.removeIf(packList&nbsp;->&nbsp;packList.getValue().stream().anyMatch(pack&nbsp;->&nbsp;pack.getWeight()&nbsp;>&nbsp;packList.getKey()));
随时随地看视频慕课网APP

相关分类

Java
我要回答