Java找到具有特定值的所有密钥

Java find all the key with specific value

本问题已经有最佳答案,请猛点这里访问。

有没有办法找出地图中具有相同值的所有键。
喜欢

1
2
3
4
map.put("A","Abc");
map.put("B","Abc");
map.put("C","Abc");
map.put("D","Bcd");

在这里,我想找出所有具有"Abc"值的关键字。


您也可以使用番石榴过滤器。

1
2
3
4
5
6
7
8
9
10
11
12
Map<String, String> map = Maps.newHashMap();
map.put("A","abc");
map.put("B","abc");
map.put("C","a3c");
map.put("D","abc");
final String str ="a3c";
Map<String, String> filteredMap = Maps.filterEntries(map, new Predicate<Map.Entry<String, String>>() {
    @Override
    public boolean apply(final Map.Entry<String, String> stringStringEntry) {
        return stringStringEntry.getValue().equals(str);
    }
});

这将返回所有以str作为值的映射条目的Map。

仅供参考我只提供函数定义来显示它正在做什么,但是我建议使用预定义的Predicates,例如:

1
Map<String, String> filteredMap = Maps.filterValues(map, Predicates.equalTo(str));

找到所有"x",这样"y"被称为filtering

这是使用Java 8 Streams进行过滤的方法:

1
2
3
Stream<String> keys = map.entrySet().stream()
    .filter(x ->"Abc".equals(x.getValue()))
    .map(Map.Entry::getKey);

对于Java 7,您必须手动执行:

1
2
3
4
List<String> keys = new ArrayList<>();
for(Map.Entry<String, String> e : map.entrySet())
    if("Abc".equals(e.getValue()))
        keys.add(e.getKey());


是的,有一种方法。 您可以从地图中获取键值对列表。 然后,只需过滤掉映射到您的特定值的键即可。

像这样例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("A","Abc");
    map.put("B","Abc");
    map.put("C","Abc");
    map.put("D","Bcd");

    Set<Entry<String, String>> set = map.entrySet();//<-- get key-value pairs
    for(Entry<String, String> entry : set){//<-- iterate over all entries
        if(entry.getValue().equals("Abc")){//<-- check for your value
            System.out.println(entry.getKey());//<-- print the key / or add it to a list if you want
        }
    }
}

我希望这有帮助 :)