与 Map 的键相交的列表

IUn*_*own 6 java string list java-8 java-stream

我们有一张学生地图要记录Map<Student, StudentRecord>
学生班如下:

Student {
    String id;
    String grade;
    Int age; 
}
Run Code Online (Sandbox Code Playgroud)

此外,我们还(List<String>)提供了学生 ID 列表。
使用 Java 流,过滤出 ID 存在于提供的列表中的学生的记录的最有效方法是什么?
预期结果是映射到 Id(String) 的过滤列表 - <Map<Id, StudentRecord>>

And*_*cus 1

您可以流式传输一组条目:

map.entrySet().stream()
    .filter(e -> list.contains(e.getKey()))
    .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

如果您还想将键映射到id字段,那么:

map.entrySet().stream()
    .filter(e -> list.contains(e.getKey()))
    .collect(toMap(e -> e.getKey().getId(), Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)