Java:将对象列表转换为映射集

时间:2017-05-06 02:14:29

标签: java

说我有一个对象列表(比如List<User>),类似于

[
    {
        "name": "myName",
        "age": 1,
        "someField": "foo"
    },
    {
        "name": "otherName",
        "age": 2,
        "someField": "bar"
    },
]

我想将其转换为Set<Map<String, Integer>>,以便获得一组name => age对。所以最终结果应该是[{"myName": 1},{"otherName": 2}]

如何使用流和收集器来执行此操作?

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;
    }
}