从 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<K, V>
。
如何从中获取所有键的列表,其中对应的值可从 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 的实例 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章