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/

相关文章:

C# 唯一索引通用集合

java - <? super/extends String> 在方法和变量声明中

java-8 - javac -parameters 标志的缺点

java - 在 Java 中,如何高效优雅地流式传输树节点的后代?

java - 使用流有条件地填充 map - Java 8

java - 为什么我的浮点变量保存整数?

java - java android 中的等待/恢复线程

java - 在Eclipse中调用它时出现Ant错误

objective-c - Objective-C - 具有重复键的键值对集合

java - 正则表达式排除不包含单词但包含某些单词的行