Java找到具有特定值的所有键[重复]

Posted

技术标签:

【中文标题】Java找到具有特定值的所有键[重复]【英文标题】:Java find all the key with specific value [duplicate] 【发布时间】:2015-08-29 10:35:06 【问题描述】:

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

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

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

【问题讨论】:

是的,有 - 见this question。 【参考方案1】:

查找所有“x”,使得“y”被称为filtering

你可以这样filter using Java 8 Streams:

Stream<String> keys = 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());

【讨论】:

好的,我将添加一个 Java 7 示例。但我认为你应该尽快升级到 Java 8!【参考方案2】:

您也可以使用 Guava 过滤器。

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

【讨论】:

【参考方案3】:

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

例如:

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
        
    

我希望这会有所帮助:)

【讨论】:

以上是关于Java找到具有特定值的所有键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

查找具有键值的所有对象(重复项除外)

MongoDB查询以获取与具有多个值的键匹配的所有文档[重复]

如何从 php 数组中删除具有特定值的所有元素? (以尽可能最短的方式)[重复]

Django为特定外键选择具有重复字段值的行

如何获取具有特定名称/值的所有变体ID

在对象数组中搜索具有特定值的特定键