stream转map
时间: 2023-08-10 08:04:30 浏览: 75
stream转map的方法有多种,其中一种常见的方法是使用Collectors.toMap()方法。这个方法可以将一个流(Stream)转换为一个Map对象。在这个方法中,我们可以指定键和值的映射关系。
例如,我们有一个User类,包含id和name属性。我们有一个List<User> userList,我们想要将其转换为一个Map<Integer, String>,其中键是id,值是name。我们可以使用以下代码实现:
Map<Integer, String> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, User::getName));
这里,User::getId和User::getName是方法引用,用于指定键和值的映射关系。User::getId表示使用User对象的getId方法作为键,User::getName表示使用User对象的getName方法作为值。最终,我们将得到一个以id为键,name为值的Map对象。[1]
除了使用方法引用,我们还可以使用lambda表达式来指定映射关系。例如,我们可以使用以下代码实现相同的功能:
Map<Integer, String> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, user -> user.getName()));
这里,user -> user.getName()表示使用lambda表达式来指定值的映射关系。user表示每个User对象,user.getName()表示获取User对象的name属性作为值。[2]
另外,如果我们想要将整个User对象作为值存储在Map中,我们可以使用Function.identity()方法来指定映射关系。例如:
Map<Integer, User> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, Function.identity()));
这里,Function.identity()表示使用User对象本身作为值。最终,我们将得到一个以id为键,User对象为值的Map对象。[3]