为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2024-01-25 21:38:41
我有一个场景,我不确定过滤哈希图和更新同一映射的有效方法是什么。这是我的哈希图; 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);还有其他更好的方法来完成这项工作吗?
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

如果您想要过滤后的新地图:保留所有产品的权重均小于键的条目

Map<Double, List<Product>> filtered = mappedProducts.entrySet()
        .stream()
        .filter(packList -> packList.getValue().stream().allMatch(pack -> pack.getWeight() < packList.getKey()))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

如果要修改主图:删除其中一种产品的权重高于键的所有条目

mappedProducts.entrySet()
              .removeIf(packList -> packList.getValue().stream().anyMatch(pack -> pack.getWeight() > packList.getKey()));



查看完整回答
反对 回复 2024-01-25
  • 1 回答
  • 0 关注
  • 34 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信