How to Remove Items/Entries with Specific Values from Map/HashMa

  • 时间:2020-09-07 12:13:31
  • 分类:网络文摘
  • 阅读:104 次
2091E060-120E-4C44-BAA3-7E4E0DF7BD55 How to Remove Items/Entries with Specific Values from Map/HashMap Object in Java? java programming languages

Java

In Java, you can usually remove items or entries with some specific value from Map or HashMap object using traditional method:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Map<String, String> removeItemByValue(Map<String, String> data, String value) {
  for (var key: data.keySet()) {
    if (data.get(key) == null) {
       data.remove(key);
    }
  }
  return data;
}
 
var data = new HashMap<String, String>();
data.put("a", "1");
data.put("b", "2");
data.put("c", "2");
removeItemByValue(data, null); 
// only prints a = 1
for (var key: data.keySet()) {
  System.out.println(key + "=" + data.get(key)); 
}
public Map<String, String> removeItemByValue(Map<String, String> data, String value) {
  for (var key: data.keySet()) {
    if (data.get(key) == null) {
       data.remove(key);
    }
  }
  return data;
}

var data = new HashMap<String, String>();
data.put("a", "1");
data.put("b", "2");
data.put("c", "2");
removeItemByValue(data, null); 
// only prints a = 1
for (var key: data.keySet()) {
  System.out.println(key + "=" + data.get(key)); 
}

A Better Map-Item Removal Approach via using values()

The values() method in Map object actually returns a Collection view of the valujes that are contained in the map object. And the remove object return null when the item is not existent anymore. Thefore, we can use the following modern 1-liner in Java to remove the items in a Map that have the specific value.

1
2
3
4
public Map<String, String> removeItemByValue(Map<String, String> data, String value) {
  while (data.values().remove(value)) ;
  return data;
}
public Map<String, String> removeItemByValue(Map<String, String> data, String value) {
  while (data.values().remove(value)) ;
  return data;
}

To double check and verify that items are actually removed:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.helloacm;
 
import java.util.HashMap;
import java.util.Map;
 
public class Main {
    public static void main(String[] args) {
        var data = new HashMap<String, String>();
        data.put("a", "b");
        data.put("e", "2");
        data.put("f", "2");
        while (data.values().remove("2"));
        // prints "a"        
        for (Map.Entry<String, String> entry: data.entrySet()) {
            System.out.println(entry.getKey());
        }
    }
}
package com.helloacm;

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        var data = new HashMap<String, String>();
        data.put("a", "b");
        data.put("e", "2");
        data.put("f", "2");
        while (data.values().remove("2"));
        // prints "a"        
        for (Map.Entry<String, String> entry: data.entrySet()) {
            System.out.println(entry.getKey());
        }
    }
}

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
新食品安全法“史上最严”建立惩罚制度  适合在夏天吃的既简单又美味的凉拌菜  薏米与红豆的多种搭配煮法可健脾养血  好时巧克力1年3上黑榜 违规使用维生素E  近些年被曝光的大米安全事件一览  夏日进补:男不离韭,女不离藕之解读  “僵尸肉”蹿上餐桌拷问食品安全监管  夏季炒菜时可多放一种调料——花椒  四种热门食物并没有那么神奇的营养功效  “养胃饼干”不养胃 消费者起诉徐静蕾代言 
评论列表
添加评论