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

时间:2015-06-13 14:15:06

标签: java

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

map.put("A","Abc");
map.put("B","Abc");
map.put("C","Abc"); 
map.put("D","Bcd");

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

3 个答案:

答案 0 :(得分:3)

查找所有“x”,以便“y”被称为filtering

这是filter using Java 8 Streams

的方法
byDate <- group_by(NAreplacement, date)
averageStepsDayType <- summarize(byDate, mean(steps))

> head(averageStepsDayType)
        date    x
1 2012-10-01    37.38260
2 2012-10-02     0.43750
3 2012-10-03    39.41667
4 2012-10-04    42.06944
5 2012-10-05    46.15972
6 2012-10-06    53.54167

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

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

答案 1 :(得分:3)

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

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<String, String> filteredMap = Maps.filterValues(map, Predicates.equalTo(str));

答案 2 :(得分:0)

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

例如:

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

我希望这会有所帮助:)