я увидел, что в другой вопрос, который вы используете Java 8.Если это так, то существует хороший способ, чтобы выполнить задание:
import static java.nio.file.Files.lines;
import static java.nio.file.Paths.get;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
...
Map<String, List<String>> map = lines(get("file"))
.map(s -> s.split("-"))
.collect(groupingBy(arr -> arr[0], mapping(arr -> arr[1], toList())));
Чтобы объяснить немного, что происходит:
Files.lines
создает Stream<String>
(каждая строка представляет собой строку в файле)
- тогда вы разделите каждую строку в тире (как вы это делали в цикле в то время), что дает вам
Stream<String[]>
- тогда вы собираете содержание потока путем группирования массивов с их первыми элементами (
arr -> arr[0]
). Это даст вам Map<String, List<String[]>
- , но вы хотите, чтобы значение отображалось как второй элемент каждого массива, поэтому вы используете коллекционер
mapping
. Каждое значение затем собирается в List
, в результате чего Map<String, List<String>>
Это обычная идиома в Java 8, это может быть немного трудно понять, на первый, но как только вы захватите понятие это очень мощный.
1. Под капотом этого Map<String, List<String[]>
никогда не создается, но это легче визуализировать это как то
возможно поставить его в HashMap? –
да, это то, что я пытаюсь сделать .. но ключи разбросаны повсюду .. как я могу собрать их вместе? Я новичок в hashmap, поэтому извиняюсь, если я не понимаю –