从HashMap获取列表<k> <k,v =“”>其中V是I的实例

时间:2017-02-14 21:41:55

标签: java filter hashmap java-8 java-stream

我得到了HashMap<K, V>。 如何从中获取所有键的列表,其中相应的值可从I类分配?

3 个答案:

答案 0 :(得分:2)

使用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());

答案 1 :(得分:0)

  

其中相应的值可从第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 :(得分:0)

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

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