java-8 - 使用 Java 8 将复杂对象列表转换为 Map
问题描述
我有一系列主题
List<String> subjects = Arrays.asList(“physics”, “maths”);
我想为每个主题创建一个虚拟用户列表,并将它们添加到地图中,键为主题,值为列表
就像是
Map<String,List<User>> userMap = new HashMap<>();
for(String subject: subjects){
List<User> users = new ArrayList<User>();
for(int i=0;i<10;i++){
User user = new User(“first name”+i+subject,”last name”+i+subject);
users.add(user);
}
userMap.put(subject,users);
}
我想用 Java 8 试试这个。刚刚在下面尝试了一些东西,但看起来不是正确的方法。
subjects.stream().map((subjectName)->{
List<User> userList = new ArrayList<User>();
for(int i=0;i<10;i++){
User user = new User(“first name”+i+subject,”last name”+i+subject);
userList.add(user);
}
})
解决方案
subjects.stream()
.map(subjectName -> {
List<User> users = .... create the users;
return new SimpleEntry<>(subjectName, users);
})
.collect(Collectors.toMap(Entry::getKey, Entry::getValue))
如果你真的想用java-8
和流来做这件事,这将是一种方法。一个改进是拥有一种方法,该方法采用 aString subjectName
并创建它Entry
,例如:
private static Entry<String, List<User>> createEntry(String subjectName) {
List<User> users = .... create the user;
return new SimpleEntry<>(subjectName, users);
}
并将其用于:
subjects.stream()
.map(YourClass::createEntry)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue))
请注意,您的循环是最干净的方式 IMO
推荐阅读
- java - 如何创建包裹?
- nuget - 将 NuGet 包恢复到最新版本
- php - 列出目录及其子目录中的所有 .csv 文件 uisng PHP
- linux - 在 MX150 上安装 tensorflow-gpu 时出错
- ios - iOS Swift:范围数组
- android - 在 Android Studio 中打开第二个 Activity 错误
- angular - 设置伪元素的 z-index
- html - css:更改子 div 的背景颜色,但不更改父 div
- qt - 产生真/假以控制可见性的复杂逻辑
- apache-kafka - 没有 zkNodes 的 Spring Cloud Kafka binder