java.lang.IllegalStateException: Duplicate key . Java8

java.lang.IllegalStateException: Duplicate key . Java8
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

hejka. mam taki plik:

Kopiuj
klucz=abc
kluca=def
kluca=ghi
klucb=jkl
Kopiuj
    public void test(String filename) {
        Map<String, String> map = new HashMap<>();
        try (Stream<String> lines = Files.lines(Paths.get(filename))) {
            map = lines.collect(Collectors.toMap(l -> l.split("=")[0], l -> l.split("=")[1]));
        } catch (IOException io) {
            io.printStackTrace();
        }
        System.out.println(map);
    }

dostaję java.lang.IllegalStateException: Duplicate key def.
normalnie map.put("kluca","ghi") podmienia starą wartość na nową tak? ale tutaj to inna akcja. jak najkrócej wrzucić ten plik do hashmapy z aktualizacją wartości ( tak jak standardowo działa map.put()


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 1x, ostatnio: karolinaa
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:15 minut
1

Jest metoda Collectors.toMap przyjmująca trzy parametry, z czego ostatni to funkcja rozwiązująca konflikty.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

(pisane z palca!)

Kopiuj
lines.forEach(line -> map.put(line.split("=")[0], line.split("=")[1]);

O to ci chodzi? Brzydkie toto bo nie funkcyjne i operujesz na efektach ubocznych, ale powinno zadziałac ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

@Wibowit no właśnie nigdzie nie mogę znaleźć nawet przykładu jak ta funkcja miałaby wyglądać.

@Shalom tak działa. Jakbyś miał czas; o co chodzi z tymi efektami ubocznymi i jakbyś to ładniej zrobił?


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:15 minut
1

@karolinaa
Moim zdaniem funkcja wyglądałaby mniej więcej tak: (a, b) -> a, ewentualnie (a, b) -> b.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
niezdecydowany
niezdecydowany
musiałby coś zwracać, więc chyba return a
Wibowit
w jednolinijkowych lambdach chyba nie trzeba
niezdecydowany
niezdecydowany
faktycznie, soł rubi stajl :D
TM
Lisp to mial jak jeszcze ruby, a nawet czesc jezykow, na ktorych ruby sie wzorowal nie byly w planach.
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

DZIENAA!!!!! ^_^


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
TM
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:6
0

A nie mozesz uzyc normalnego jezyka? Problem sam sie wtedy rozwiaze.

Kopiuj
val map = Source.fromFile("data.txt").getLines().toList.map { input =>
  val split = input.split("=")
  (split(0), split(1))
}.toMap
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

@_tmp taa może kiedyś zerknę. póki co java mi starczy. scala za trudna dla D playerki ;b


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@karolinaa generalnie chodzi o to, że w programowaniu funkcyjnym podstawową operacją jest transformacja danych ze strumienia źródłowego w strumień wynikowy (zwykle za pomocą map, filter i reduce). Efekt uboczny to jest sytuacja kiedy twój kod w trakcie ewaluacji wyrażenia dokonuje jakichś zewnętrznych manipulacji (nie związanych z transformacją danych). W kodzie który podałem masz w trakcie ewaluacji dodwanie elementów do zewnętrznej kolekcji, czyli właśnie efekt uboczny, bo to jest operacja zupełnie nie związana z transformacją danych która tam zachodzi.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 2 komentarze
KA
rozumiem. Dzięki
TM
programowaniu funkcyjnym podstawową operacją [...] jest wykonanie takiej funkcji: (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c, lub jej pokrewnych, kombinatory kolekcji sa gdzies hen daleko. jakichś zewnętrznych manipulacji, wlasnie. Zewnetrznych dla ewaluatora, a nie dla pojedynczej linijki w ktorej sie znajduje. Jesli ten caly kod bylby w funkcji zamkniety wraz z ta mapa, to tu nie ma zadnych zewnetrznych efektow ubocznych i nadal ta funkcja bedzie pure i bedzie spelniac RT.
Shalom
@_tmp aż dziw bierze że nie wspomniałeś o monadach, żeby już całkiem zagmatwać sprawę koleżance ;) Czasem warto być nieścisłym ale za to zrozumiałym :)
TM
Wspomnialem tylko po kryjomu. Monady to nic innego jak kompozycja funkcji, dla obiektow wystepujacych w pewnym kontekscie M[_].
Shalom
Wbrew pozorom ja wiem co to jest, chodzi mi tylko o to że mogłeś swój komentarz jeszcze bardziej przeintelektualizować poprzez użycie tam odpowiedniego słownictwa :P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.