Java查找具有特定值的所有键

Java查找具有特定值的所有键,java,Java,有没有办法找出地图上所有具有相同值的键。 像 在这里,我想找出所有具有“Abc”值的键。是的,有一种方法。您可以从映射中获取键值对列表。然后只需过滤掉映射到特定值的键 例如: public static void main(String[] args) { HashMap<String, String> map = new HashMap<String, String>(); map.put("A", "Abc"); map.put("B", "A

有没有办法找出地图上所有具有相同值的键。 像


在这里,我想找出所有具有“Abc”值的键。

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

例如:

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
        }
    }
}
publicstaticvoidmain(字符串[]args){
HashMap=newHashMap();
地图放置(“A”、“Abc”);
地图放置(“B”、“Abc”);
地图放置(“C”、“Abc”);
地图放置(“D”、“Bcd”);
Set Set=map.entrySet();//查找所有“x”,以便调用“y”

这就是您可以:

streamkeys=map.entrySet().Stream()
.filter(x->“Abc”.equals(x.getValue()))
.map(map.Entry::getKey);
对于Java 7,您必须手动执行此操作:

List<String> keys = new ArrayList<>();
for(Map.Entry<String, String> e : map.entrySet())
    if("Abc".equals(e.getValue()))
        keys.add(e.getKey());
List key=new ArrayList();
对于(Map.Entry e:Map.entrySet())
如果(“Abc.”等于(例如getValue())
key.add(e.getKey());

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

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);
    }
});

是的,有-看。好的,我将添加一个Java7示例。但是我认为您应该尽快升级到Java8!
List<String> keys = new ArrayList<>();
for(Map.Entry<String, String> e : map.entrySet())
    if("Abc".equals(e.getValue()))
        keys.add(e.getKey());
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);
    }
});
Map<String, String> filteredMap = Maps.filterValues(map, Predicates.equalTo(str));