说我有一个对象列表(比如List<User>
),类似于
[
{
"name": "myName",
"age": 1,
"someField": "foo"
},
{
"name": "otherName",
"age": 2,
"someField": "bar"
},
]
我想将其转换为Set<Map<String, Integer>>
,以便获得一组name => age
对。所以最终结果应该是[{"myName": 1},{"otherName": 2}]
如何使用流和收集器来执行此操作?
答案 0 :(得分:0)
我最终这样做了:
final List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
Set<Map<String, Integer>> usersSet =
users
.stream()
.map(u -> Collections.singletonMap(u.getName(), u.getAge()))
.collect(Collectors.toSet());
答案 1 :(得分:-1)
以下是可能转换为Map<String, Integer>
并重复处理:
final List<User> users = new ArrayList<>();
users.add(new User("name 1", 25));
users.add(new User("name 1", 49));
users.add(new User("name 2", 67));
final Map<String, Integer> nameToAge = users.stream().collect(
Collectors.toMap(
user -> user.name,
user -> user.age,
(user1, user2) -> {
System.out.println("Resolving duplicates...");
return user1;
})
);
在这种情况下,类型User
的定义是:
public class User {
public final String name;
public final int age;
public User(final String name, final int age) {
this.name = name;
this.age = age;
}
}