#java #java-8 #java-stream
#java #java-8 #java-поток
Вопрос:
У меня есть объект пути, подобный этому:
class Pathway {
private dbId;
private name;
}
Эти пути находятся в структуре карты гена, к набору всех путей, к которым принадлежит ген
Map<String, Set<Pathway>> geneToPathwayList;
Я хочу преобразовать это в карту Map<String, Set<String>> geneToPathwayDbId
использования потоков.
Итак, чтобы сделать это, я пытаюсь выполнить итерацию по набору элементов карты, собирать ключи в качестве ключей, а затем собирать значения путем сопоставления набора путей с набором идентификаторов DBID, но я не могу получить правильный синтаксис. Вот как это выглядит в настоящее время:
Map<String, Set<String>> finalMap =
geneToPathwayList.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.stream().map(Pathway::getStId).collect(Collectors.toSet())));
Я зациклен на том, как выбирать e
в качестве значения из каждой записи.
Любая помощь в решении этой проблемы была бы очень полезна!
Ответ №1:
похоже, вам нужно
e -> e.getValue().stream().map(Pathway::getDbId).collect(Collectors.toSet())
Комментарии:
1. Это сработало для меня. Это странно, потому что eclipse не предлагал GetValue() в качестве допустимого вызова метода, но он все равно интерпретировался правильно. Я думаю, это был просто линтер, не знающий, чего я хотел. Спасибо!
2. @TimB. как бы то ни было, у IntelliJ, похоже, есть проблемы с тем же самым. Кажется, это немного сложно для IDE.
Ответ №2:
Альтернативное использование для каждого
Map<String,Set<String>> finalMap = new HashMap<>();
geneToPathwayList.forEach((k,v)->
finalMap.put(k, v.stream().map(Pathway::getDbId).collect(Collectors.toSet())));