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

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

【问题讨论】:

  • 说真的,你至少需要尝试一些东西。 HashMap 有据可查,您应该了解循环。
  • 我知道,但是没有比遍历 HashMap 更有效的方法吗?
  • 如果你使用 Java-8 流,当然还有更简洁的方法
  • “高效”和“简洁”是有很大区别的。使用流不会阻止遍历映射的条目。

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


【解决方案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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-30
        • 2013-04-13
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2018-05-03
        • 2019-01-23
        • 2019-10-10
        相关资源
        最近更新 更多