java - 如何使用java8来采集这张图

标签 java java-stream collect

class Person {
    private String sex;
    private List<String> nameList;

    public Person(String sex, String name) {
        this.sex = sex;
        this.nameList = new ArrayList<>();
        this.nameList.add(name);
    }


    public Person(String sex, List<String> nameList) {
        this.sex = sex;
        this.nameList = nameList;
    }

}

public static void main(String[] args) {
    Person p1 = new Person("M", "name1");
    Person p2 = new Person("M", "name2");
    Person p3 = new Person("F", "name3");
    Person p4 = new Person("F", "name4");
    Person p5 = new Person("F", "name5");

    List<Person> ps = Arrays.asList(p1, p2, p3, p4, p5);

    // sex --> Person
    Map<String, Person> map1 = new HashMap<>();
    ps.forEach(p -> {
        Person pp = map1.get(p.getSex());
        if (pp == null) {
            pp = new Person(p.getSex(), p.getNameList());
            map1.put(p.getSex(), pp);
        } else {
            pp.getNameList().addAll(p.getNameList());
        }
    });
    System.out.println(map1);

    Map<String, Person> map2 = ps.stream().collect(/* how to write here*/);
    System.err.println(map2);
}

我想使用 ps.stream().collect() 来解决这个问题,就像 main()

谢谢!

最佳答案

创建人名(键)到人(值)的映射

Collectors.toMap(p -> p.getName(), p -> p);

关于java - 如何使用java8来采集这张图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39360987/

相关文章:

Java 8 - 限制第一个对象的流并转换为特定对象?

rust - 试图耗尽一个字符串并映射到它的字符上,但由于类型推断而失败

ruby - 映射一个只修改符合特定条件的元素的数组

lambda - 使用 lambda 在 java8 中具有双重条件的 Foreach 循环

java - 如何使用流按除以给定除数的余数对元素进行分组?

ruby 使用 array.map(& :methodname) for hash key strings rather than methodname 中的 "&:methodname"快捷方式

java - 使用自定义时间获取当前日期

java - 错误 : 'com.android.build.api.transform.TransformException: Error while generating the main dex list.'

java - 如何将组合框中的信息保存到数据库中

java - 设置 X-Content-Type-Options 响应 header 会损坏 PNG 文件