我有一个用户对象,如下所示:
class User{
int id;
String name;
List<String> subject;
}
class Main {
public static void main (str args[]) {
List<User> userList = new ArrayList<>();
User user1 = new User(1, "John", Arrays.asList("English"));
User user2 = new User(2,"Peter", Arrays.asList("English"));
user user3 = new User(1, "John", Arrays.asList("Chemistry"));
userList.add(user1); userList.add(user2); userList.add(user3);
}
}
我想按id分组,并获得整个User
对象作为响应Map<Integer, List<User>>
,如下所示:
User1 = (1, "John", {"English","Chemistry"});
User2 = (2, "Peter", {"English"});
我们如何Map并得到整个对象?
2条答案
按热度按时间fnvucqvd1#
您可以使用
toMap
收集器并提供mergeFunction。Collectors.toMap()
可以使用3个参数调用:第一个用于MapMap的键,在我们的例子中是用户ID,类似于user -> user.getId()
或简单地User::getId
。第二个参数是Map值,在我们的例子中,我们希望使用用户本身作为值,所以我们只传递
user -> user
。最后,合并功能将用于具有相同ID(重复)的用户:在本例中,我们希望创建一个具有所有主题的新用户:
现在,让我们按照前面讨论的方式对用户进行流处理和收集:
ps:你可以做一些小的改进,比如使用方法引用或者把这个合并逻辑封装在User类里面:
阅读更多关于Collectors.toMap和mergingFunction的信息,请访问:https://www.baeldung.com/java-collectors-tomap
von4xj4u2#
这将获取与userId对应的记录,但userId必须唯一。