我有一个Person ArrayList
List<Person> personList = getPersonList();
我想创建一个Map<String, List<Long>>
的地图
基于Person :: getDepartment的键和基于List<Long>
时间戳Person::getTimestamp
的值
List<Person> personList
中有多个Person记录,因此我需要删除Person::getDepartment
上的重复项,但是我认为,由于Map不允许键重复项,所以这应该不是问题。
我可以通过forach循环做到这一点,但是我的问题是我可以只使用一个流吗?
public class Person {
private String department;
private long timestamp;
//getters and setters
}
答案 0 :(得分:3)
在收集中,使用groupingBy()
按部门将Person
分组,然后使用mapping()
将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.*;