lambda 删除HashMap的元素

问题

在以下情况下,我需要从流中删除元素。如下伪代码示例:

map.entrySet().stream().filter(t -> t.getValue().equals("0")).
            forEach(t -> map.remove(t.getKey()));

在Java 8之前的代码中,可以从迭代器中删除-在这里处理这种情况的最佳方法是什么?

答案

map.entrySet().removeIf(entry -> entry.getValue().equals("0"));

您不能使用流来执行此操作,但是可以使用其他新方法来执行此操作。

编辑:更好

map.values().removeAll(Collections.singleton("0"));

第一次回复。 跨过该线程,并认为如果其他人正在搜索,则进行更新。 使用流,您可以返回过滤后的地图<>或您真正喜欢的任何东西。

 @Test
  public void test() {

    Map<String,String> map1 = new HashMap<>();
    map1.put("dan", "good");
    map1.put("Jess", "Good");
    map1.put("Jaxon", "Bad");
    map1.put("Maggie", "Great");
    map1.put("Allie", "Bad");

    System.out.println("\nFilter on key ...");
    Map<String,String> map2 = map1.entrySet().stream().filter(x -> 
    x.getKey().startsWith("J"))
        .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

    map2.entrySet()
      .forEach(s -> System.out.println(s));

    System.out.println("\nFilter on value ...");
    map1.entrySet().stream()
      .filter(x -> !x.getValue().equalsIgnoreCase("bad"))
      .collect(Collectors.toMap(e -> e.getKey(),  e -> e.getValue()))
      .entrySet().stream()
      .forEach(s -> System.out.println(s));
  }

------- output -------

Filter on key ...
Jaxon=Bad
Jess=Good

Filter on value ...
dan=good
Jess=Good
Maggie=Great

如果要删除整个密钥,请使用:

myMap.entrySet().removeIf(map -> map.getValue().containsValue("0"));
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值