#java #collections #java-stream
#java #Коллекции #java-stream
Вопрос:
У меня есть список строк
List <String> Ids = [id1, ids2, id3];
и функцию
public List<String> getDays(String id) {
// makes api call and fetch all the days in a list where id is present
return list;
}
Теперь я хочу выполнить функцию getDays для каждого из элементов списка идентификаторов и сохранить его на карте
Map<String, List<String> where String would be my Id from List(IDs) and
List<String> would be the corresponding return value of getDays
function on each Id
Как только я получу карту, я смогу использовать ее для дальнейших операций, таких как фильтрация или проверка моих идентификаторов, приходящихся на определенный день недели.
Я знаю, что это можно сделать с помощью цикла for, но мне больше интересно узнать, есть ли какой-либо другой метод, такой как streams или map utility.
Ответ №1:
Использовать Collectors.toMap
public static void main(String[] args) {
List<String> Ids = Arrays.asList("id1", "id2", "id3");
Map<String, List<String>> result = Ids.stream().collect(Collectors.toMap(Function.identity(), MyClass::getDays));
System.out.println(result); // {id2=[id2_foo, id2_bar], id1=[id1_foo, id1_bar], id3=[id3_foo, id3_bar]}
}
/* DEMO METHOD */
public static List<String> getDays(String id) {
return Arrays.asList(id "_foo", id "_bar");
}
Может быть более понятным с помощью лямбда-обозначения
Map<String, List<String>> result = Ids.stream()
.collect(Collectors.toMap(id->id, id -> getDays(id)));