从 HashMap<K, V> 获取 List<K> ,其中 V 是 I 的实例 [关闭]

Posted

技术标签:

【中文标题】从 HashMap<K, V> 获取 List<K> ,其中 V 是 I 的实例 [关闭]【英文标题】:Get List<K> from HashMap<K, V> where V is instance of I [closed] 【发布时间】:2017-07-03 08:52:10 【问题描述】:

我得到了HashMap&lt;K, V&gt;。 如何从中获取所有键的列表,其中对应的值可从 I 类分配?

【问题讨论】:

How to return a list of keys from a Hash Map?的可能重复 说真的,你至少需要尝试一些东西。 HashMap 有据可查,您应该了解循环。 我知道,但是没有比遍历 HashMap 更有效的方法吗? 如果你使用 Java-8 流,当然还有更简洁的方法 “高效”和“简洁”是有很大区别的。使用流不会阻止遍历映射的条目。 【参考方案1】:

对应的值可以从 I 类赋值

你的意思是value.getClass().isAssignableFrom(I.class) 吗?如果是这样的话:

Map<K, V> map = ...
List<K> keys = new ArrayList<K>();

for(K key : map.keySet()) 
    V value = map.get(key);

    if(value.getClass().isAssignableFrom(I.class)) 
        keys.add(key);
    


//Now you have a list of keys associated to values that are assignable from I.class

【讨论】:

【参考方案2】:

您可以使用Streams 过滤Map 的值。

Map<K, V> map = new HashMap<>();
List<K> collect = map.entrySet()
                    .stream()
                    .filter(entry -> I.class.isInstance(entry.getValue()))
                    .map(Map.Entry::getKey)
                    .collect(toList());

【讨论】:

【参考方案3】:

使用 Java 8 你可以做到

Map<K, V> map = new HashMap<>();
List<K> list = map.entrySet().stream()
        .filter(e -> e.getValue() instanceof I)
        .map(e -> e.getKey())
        .collect(Collectors.toList());

【讨论】:

以上是关于从 HashMap<K, V> 获取 List<K> ,其中 V 是 I 的实例 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java编程hashmap,arraylist

jdk源码——HashMap

HashMap 1.8的源码分析一

HashMap

JDK源码之HashMap源码解析

HashMap实现原理