我有用户列表(id、ssn、名称),需要转换为 ssn 列表和 ids 列表的映射。你能帮忙解决这个问题吗?
List.of(new User(1, "ssn1", "user1"), new User(2, "ssn2", "user2"), new User(3, "ssn3", "user3"))
Map with 2 keys("SSNs","IDs") and list as value
"SSNs" - List("ssn1","ssn2","ssn3")
"IDs" - List(1,2,3)
public class Test {
public static void main(String[] args) {
List<User> users = List.of(new User(1, "ssn1", "user1"), new User(2, "ssn2", "user2"),
new User(3, "ssn3", "user3"));
Map<String, List<User>> userMap = users.stream().collect(Collectors.groupingBy(User::getSsn));
}
}
class User {
public int getId() {
return id;
}
public String getSsn() {
return ssn;
}
public String getName() {
return name;
}
int id;
String ssn;
String name;
public User(int id, String ssn, String name) {
this.id = id;
this.ssn = ssn;
this.name = name;
}
}
一个简单的 for 循环可以解决您的问题,我建议使用这个简单的可读解决方案,而不是使用流:
Map<String, List<Object>> userMap = new HashMap<>();
userMap.put("SSNs", new ArrayList<>());
userMap.put("IDs", new ArrayList<>());
for (User user: users) {
userMap.get("SSNs").add(user.getId());
userMap.get("IDs").add(user.getSsn());
}
{SSNs=[1, 2, 3], IDs=[ssn1, ssn2, ssn3]}