我一直试图理解选项的概念并隐式解包可选但我只是没有得到术语?我的问题是:
解包只是揭示变量的真值,无论它是零还是值?
我有一个学生列表和一个委托,该委托具有获取给定学生的服务器列表的功能 ( getServersForStudent(student))。我想为每个服务器索引的学生列表创建一个地图。一个学生可以在多个服务器中。
private Map<Server, Student> getStudentsByServer(List<Student> students) {
Map<Server, List<Student>> map = new HashMap<>();
students.forEach(student ->
List<Server> servers = delegate.getServersForStudent(student);
if (!servers.isEmpty()) {
servers.forEach(server -> map.putIfAbsent(server, new ArrayList<>()).add(student));
}
);
return map
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我想重构它以使用流来创建一个不可变的集合。我尝试使用 groupingBy 执行此操作,但无法获得正确的结果:
students
.stream()
.collect(
Collectors.groupingBy(
student -> delegate.getServersForStudent(student);
Collectors.mapping(Function.identity(), Collectors.toList())
)
);
Run Code Online (Sandbox Code Playgroud)
此分组与上面的结果不同,因为它是按列表分组的。有人对如何使用 Java 流最好地做到这一点有任何建议吗?