zoukankan      html  css  js  c++  java
  • Java8 中map中删除元素的简单方法

    传统的,在JAVA中得MAP中删除元素,可以这样,假设有个MAP:
     

    Map<Integer, String> map = new HashMap<>();

    map.put(1, "value 1");

    map.put(2, "value 2");

    map.put(3, "value 3");

    for(Iterator<Integer> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
      Integer key = iterator.next();
      if(key != 1) {
        iterator.remove();
      }
    }
    

    而在JAVA8中,可以这样了,更为简单:

    // 根据map中得值去判断删除
    map.values().removeIf(value -> !value.contains("1"));
    // 根据key删除
    map.keySet().removeIf(key -> key != 1);
    //通过getkey()方法获得值去删除
    map.entrySet().removeIf(entry -> entry.getKey() != 1);
    

    MAP本身没办法用removeif,要通过keySet,EntrySet去调用removeif方法,再看源码:

    /**
      * 移除集合中满足给定条件的所有元素,错误或者运行时异常发生在迭代时或者把条件传递给调用者的时候。
      *
      * @implSpec
      * 默认的实现贯穿了使用迭代器iterator的集合的所有元素。每一个匹配的元素都将被用Iterator接口中的
      * remove()方法移除。如果集合的迭代器不支持移除,则在第一次匹配时就会抛出异常 UnsupportedOperationException
      *
      * @param filter 令元素移除成功的条件
      * @return {@code true} 如果所有的元素都被移除
      * @throws NullPointerException 如果有一个过滤器是空的
      * @throws UnsupportedOperationException 如果元素不能被从该集合中移除。如果一个匹配元素不能被移除,
      *         通常来说,它就不支持移除操作,这时可能抛出这个异常。
      * @since 1.8
      */
     default boolean removeIf(Predicate<? super E> filter) {
         Objects.requireNonNull(filter);
         boolean removed = false;
         final Iterator<E> each = iterator();
         while (each.hasNext()) {
             if (filter.test(each.next())) {
                 each.remove();
                 removed = true;
             }
         }
         return removed;
     }
    

    也可以这样用:

     public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            // 这里单独定义了过滤
            Predicate<String> predicate = (s) -> s.equals("a");
            // 过滤掉a的元素
            list.removeIf(predicate);
            System.out.println(list.toString());
     }
    
  • 相关阅读:
    linux命令总结
    在阿里云centos7.6上部署vue.js2.6前端应用
    MongoDb语法
    Echarts 地图绘制
    在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
    django--- 支付宝退款
    响应式网站设计(Responsive Web design)
    django -- 推荐商品算法
    django -- 美多订单分表
    小程序基本配置
  • 原文地址:https://www.cnblogs.com/47Gamer/p/13682116.html
Copyright © 2011-2022 走看看