преобразовать список <E>в картуиспользуя потоки Java 8 - PullRequest
0 голосов
/ 08 июня 2018

Мне нужна помощь в преобразовании Списка объектов в 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 голосов
/ 12 июня 2018

Если целью этого является включение быстрого поиска, задумывались ли вы об использовании индексируемой коллекции, такой как Хранилище данных:

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

Вы можете использовать несколько индексов для одних и тех же данных.Вы даже можете создавать регистры без учета регистра и т. Д.

0 голосов
/ 08 июня 2018

Используйте эту перегрузку groupingBy, которая принимает нижестоящий коллектор:

Map<Integer, List<String>> map = persons.stream()
        .collect(Collectors.groupingBy(Person::getAge,
                Collectors.mapping(Person::getName, Collectors.toList())));
...