我有一系列主题

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!