我正在寻找帮助将对象列表转换为Map<String, List<String>>
。
class Person {
private String name;
private int age;
}
我有一个List<Person>
,我希望收集Map<int, List<String>>
,其中年龄和价值的关键字是年龄相同的人名单。
我试过这些但是没有用
persons.stream().collect(Collectors.groupingBy(p -> p.getAge()), );
答案 0 :(得分:6)
使用接受下游收集器的groupingBy
重载:
Map<Integer, List<String>> map = persons.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.mapping(Person::getName, Collectors.toList())));
答案 1 :(得分:0)
如果这样做的目的是启用快速查找,您是否考虑过使用像Data Store这样的索引集合:
https://github.com/jparams/data-store
您可以执行以下操作:
Store<Person> store = new MemoryStore<Person>();
store.index("name", Person::getName);
store.addAll(listOfPeople); // populate your store with data
Person personFound = person.get("name", "bob");
您可以在同一数据上使用多个索引。您甚至可以创建不区分大小写的索引等。