我有一系列主题
List<String> subjects = Arrays.asList(“physics”, “maths”);
我想为每个主题创建一个虚拟用户列表,并将它们添加到 map 中,键为主题,值为列表
有点像
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
和流来实现,这将是一种方式。一项改进是采用一种方法,该方法采用 String 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