×

Java 8中map中删除元素的简单方法

穆琪 穆琪 发表于2020-03-27 21:44:36 浏览527 评论0

抢沙发发表评论

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

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

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

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

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

 

  1. 1
  2. 2
    for(Iterator<Integer> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
    3
    Integer key = iterator.next();
  3. 4
    if(key != 1) {
  4. 5
    iterator.remove();
  5. 6
    }
  6. 7
    }

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

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

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

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

也可以这样用:

  1. 1
      public static void main(String[] args) {
  2. 2
            List<String> list = new ArrayList<>();
  3. 3
            list.add("a");
  4. 4
            list.add("b");
  5. 5
            list.add("c");
  6. 6
            list.add("d");
  7. 7
            // 这里单独定义了过滤
  8. 8
            Predicate<String> predicate = (s) -> s.equals("a");
  9. 9
            // 过滤掉a的元素
  10. 10
            list.removeIf(predicate);
  11. 11
            System.out.println(list.toString());
  12. 12
        }