Насколько я могу судить, что эта функция возвращает карту из определенного списка строк в список всех элементов с ключом «id» в списке входных карт. Это верно?
Если так оно может быть существенно упрощено в качестве значения для всех ключей, будет то же самое:
public Map<String, List<String>> weirdMapFunction(List<Map<String, String>> inputMaps) {
List<String> ids = inputMaps.stream()
.map(m -> m.get("id")).collect(Collectors.toList());
return Stream.of("foo", "bar", "baz")
.collect(Collectors.toMap(Function.identity(), s -> ids));
}
Если вы хотите использовать ссылку метод (который моя интерпретация Вашего вопроса о «связывания») то вам нужен отдельный метод для ссылки:
private String getId(Map<String, String> map) {
return map.get("id");
}
public Map<String, List<String>> weirdMapFunction(List<Map<String, String>> inputMaps) {
List<String> ids = inputMaps.stream()
.map(this::getId).collect(Collectors.toList());
return Stream.of("foo", "bar", "baz")
.collect(Collectors.toMap(Function.identity(), s -> ids));
}
Однако я предполагаю, что вы намеревались использовать элементы в списке как ключи (а не «ID»), в этом случае:
public Map<String, List<String>> weirdMapFunction(List<Map<String, String>> inputMaps) {
return Stream.of("foo", "bar", "baz")
.collect(Collectors.toMap(Function.identity(), s -> inputMaps.stream()
.map(m -> m.get(s)).collect(Collectors.toList())));
}
Я не понимаю цели этой функции. Он не компилируется, так как у вас нет закрывающего парса для results.put (если я добавляю его, он создает карту, где каждый элемент карты сопоставляется с тем же списком, созданным для каждого элемента. – WillShackleford
Вероятно, элемент 'element -> .get (вещь) 'был предназначен. –
С каждой карты в списке я хочу получить значение поля с ключом' 'id ''. Он написан по назначению. –