Czytanie z pliku do hashmapy - wiele wartości

0

Hej, potrzebuję wczytać mój plik do hashmapy.

Struktura pliku:

kot = lubi psa
pies = nie lubi kota
żółw = lubi trawe
kot = nie lubi żółwia

Jak zrobić kilka wartości dla jednego klucza to wiem bo można zastosować zapis:

HashMap<String, List<String>> map = new HashMap<String, List<String>>();

Nie byłoby problemu gdybym miał posegregowane linie i jakby wszystkie linijki dot kota były na początku to mógłbym wpisać wartości i dodać do mapy. W tym przypadku mam problem jak wpisać wartość do kota: "lubi psa", potem dodać informacje dla psa i żółwia a na koniec wrócić do listy kota i na sam koniec dodać "nie lubi żółwia". Czy mógłbym prosić o jakąś pomoc?

0

Poradzone, wystarczy sprawdzić czy słowo się znajduje, jeśli tak to wyciągnąć jego liste i dodać. Temat wyczerpany.

0

Sprawdz, czy klucz ("kot") istnieje w mapie:

  • jak nie istnieje utworz liste, dodaj do niej nowa wartosc ("lubi psa") i wloz klucz z wartoscia do mapy.
  • jesli istnieje, dodaj nowa wartosc do listy pod tym kluczem
if (test.containsKey(key)) {
    test.get(key).add(value);
} else {
    list = new ArrayList<>();
    list.add(value);
    test.put(key, list);
}
0

Masz dwie opcje:

  1. Po staremu - przeiterować i sprawdzać za pomocą containsKey
  2. Po nowemu, tj. użyć streamów:
        String[] array = {
                "kot = lubi psa",
                "pies = lubi kota",
                "kot = lubi konia"
        };

        Function<String, String> keyMapper = (s -> s.substring(0, s.indexOf("=")).trim());
        Function<String, String> valueMapper = (s -> s.substring(s.indexOf("=")+1).trim());

        Map<String, List<String>> map = Stream.of(array)
                .collect(Collectors.groupingBy(
                        keyMapper,
                        Collectors.mapping(valueMapper, Collectors.toList())
                ));
        map.entrySet().forEach(e -> System.out.println(e.getKey() + ":" + Arrays.toString(e.getValue().toArray())));

1 użytkowników online, w tym zalogowanych: 0, gości: 1