将List <e>转换为Map <string,list <string =“”>&gt;使用java 8流

时间:2018-06-08 18:11:04

标签: java java-8 java-stream

我正在寻找帮助将对象列表转换为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()), );

2 个答案:

答案 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");

您可以在同一数据上使用多个索引。您甚至可以创建不区分大小写的索引等。