• 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());
     }
    
  • 相关阅读:
    【AAAI2022】ShiftVIT: When Shift Operation Meets Vision Transformer
    【CVPR2021】Decoupled dynamic filter networks
    【ICLR2022】CrossFormer: A versatile vision transformer
    【ECCV2020】Spatially Adaptive Inference with Stochastic Feature Sampling and Interpolation
    【CVPR2022】Restormer: Efficient Transformer for HighResolution Image Restoration
    CondConv代码解析
    【ICCV2021】Context Reasoning Attention Network for Image SuperResolution
    【CVPR2021】Dynamic RegionAware Convolution
    【ARXIV2202】Visual Attention Network
    HybridSN代码修改
  • 原文地址:https://www.cnblogs.com/47Gamer/p/13682116.html
Copyright © 2020-2023  润新知