java - 根据键列表过滤 map

标签 java collections java-8 java-stream

我有如下的 map :

class Person {

    Long personId;
    String name;

    /*Getters and Setters*/
}

我填充了 map Map<Long, Person> personMap = new HashMap<>();

map 的关键是 personId 本身。 我有一个这样的 personIds 列表,

List<Long> coolPeople = new ArrayList<>();

现在我想遍历 map 并获取所有具有与列表中的 id 对应的键的值 coolPeople ,然后将其存储在列表中。

如何在 Java 8 中以最佳方式实现这一点?

最佳答案

迭代 List 的标识符会更有效并在 Map 中查找它们, 因为在 HashMap 中按键搜索需要预期O(1)时间,同时在 List 中搜索可以拿O(n)最坏情况下的时间。

List<Person> people = 
    coolPeople.stream()
              .map(id -> personMap.get(id)) // or map(personMap::get)
              .filter(Objects::nonNull)
              .collect(Collectors.toList());

关于java - 根据键列表过滤 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848984/

相关文章:

php - 在集合上使用聚合函数实现类似 SQL 的分组依据的算法?

Java:如何应用过滤器来设置?

java - jVisualVM - JIT Activity 指标

java - 是否需要对用 javax.inject.Inject 注释的字段进行空检查

generics - 编写我自己的通用 map 函数

java - 打印集合

Java 8 : read files with special characters in name

java-8 - Java8内部迭代

java - 在实时阶段在 VM 中启动 JVM 工具接口(interface)代理

java - Log4j、commons-logging、JDK-Logging 和 SLF4J 如何相互关联?