Ho 使用流将数组列表转换为<Person> Map<String、List<Long>>?



我有一个 Person ArrayList

List<Person> personList = getPersonList();

我想创建一个Map<String, List<Long>>地图

键基于 Person::getDepartment 和值基于时间戳List<Long> Person::getTimestamp

List<Person> personList中有多个 Person 记录,所以我需要删除Person::getDepartment上的重复项,但由于地图不允许键重复,我认为这应该不是问题。

我可以用 forach 循环完美地做到这一点,但我的问题是我可以只用一个流做到这一点吗?

public class Person {
    private String department;
    private long timestamp;
    //getters and setters
}

在集合中,使用 groupingBy() 按部门和mapping()Person进行分组,以将Person映射到其时间戳。

Map<String, List<Long>> map = 
personList.stream()
          .collect(groupingBy(
                         Person::getDepartment,
                         mapping(Person::getTimestamp, toList())
                        )
                  );

并添加这些导入:

import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;

或者只是:

import static java.util.stream.Collectors.*;

最新更新