HashMapa - nie wyciąga klucza

0

Witam. Posiadam problem z wydobyciem wartości z mapy. Mapa wygląda tak :

HashMap<String, InetAddress> mapa = new HashMap<String, InetAddress>();

Klucz i wartość dodaje tak

mapa.put(string, ip);
String to login.
Ip to InetAddress użytkownika.

Posiadam drugą mapę. Klucz to nazwa grupy użytkowników a wartości to loginy.
HashMap<String, List<String>> grupy = new HashMap<String, List<String>>();

Tak wydobywam login z mapy grupy ,który mnie interesuje :

for (Map.Entry<String, List<String>> entry : odbieraj.grupy.entrySet()) {
					if(entry.toString().substring(0, p.toString().substring(8).length()).equals(p.toString().substring(8))){
					for (int i = 0; i < entry.getValue().size(); i++){
                 
mapa.get(entry.getValue().get(i))
}
}
}

I tutaj jest problem. mapa.get(entry.getValue().get(i)) zwraca null. Znalazłem informację że może chodzić o metodę equals HashMapy ale nie wiem jak to rozwiązać. Czy ktoś wie jak to rozwiązać ?

1

Co to za operacje z substringami? o_O To wygląda na jakąś masakrę... Poza tym nie rozumiem co ty chcesz wyciągać. Chcesz na podstawie grupy wyciągnąć adresy userów?

for(Map.Entry<String, List<String>> groupEntry : odbieraj.grupy.entrySet()){
    for(String login : groupEntry.getValue()){
        address = mapa.get(login);
    }
}

Jeśli masz zadaną grupę "group" to tak:

List<String> logins = odbieraj.grupy.get(group);
for(String login : logins){
    address = mapa.get(login);
}

edit:
taki zapis:

entry.toString().substring(0, p.toString().substring(8).length()).equals(p.toString().substring(8))

Jest zupełnie bezużyteczny i nie-do-utrzymania bo nie wiadomo co się tutaj dzieje. Jeśli poważnie musisz coś takiego zrobić to:

  1. Zrób z tego osobną funkcję, z sensowną nazwą
  2. Wewnątrz tej funkcji podziel to na kawałki i ponazywaj zmienne.
0

Zrobiłem tak jak powiedziałeś.

List<String> logins = odbieraj.grupy.get(group);
for(String login : logins){
    address = mapa.get(login);
}

Tylko nadal addressy nadal są nulami chociaż loginy z listy logins na pewno znajdują się w mapa. Tu jest jakiś problem z samą HashMapą.

0

Nie. Tu jest błąd w tym jak tę mapę wypełniasz najwyraźniej. Odpal kod pod debugerem i zobaczysz ze zapewne w mapie wszystkie wartości są nullami.

0

Mapa jest prawidłowo wypełniona. Wykorzystuje ją też w innym miejscu i działa poprawnie. Posiadam JListe ze stringami ,które są nazwami Uzytkowników. Po zaznaczeniu pozycji na liście i wywołaniu tego fragmentu kodu

 for (Object p : odbieraj.list.getSelectedValuesList()) {
odbieraj.mapa.get(p);
}

odbieraj.mapa.get(p) zwraca poprawny adres.

String p: odbieraj.list.getSelectedValuesList())

Jakiś dalszy pomysł. Jeżeli ktoś jest chętny bliżej się temu przyjrzeć to mogę wysłać kod calej aplikacji.

0

No to w takim razie w mapie nie ma takich elementów (loginów) jak w tej twojej liście stringów. Innego wyjaśnienia nie ma i już. Wstaw breakpointa w tej pętli którą ci podałem. Odpal pod debugerem i przekonaj sie na własne oczy...

0

Zapewniam że są takie loginy. W tym właśnie jest problem. Są takie loginy i nie wiadomo czemu mapa nic nie zwraca. Tu jest jakiś inny problem.

2

Od tego kurna jest debugger, żeby w odpowiednim miejscu postawić breakpointa i zobaczyć gdzie jest problem... Nauczcie sie ludzie używać podstawowych narzędzi, a dopiero potem piszcie posty na forum!

2

@gtatg nie "zapewniaj", nie "zakładaj" i nie "bądź pewny" tylko jak normalny człowiek postaw breakpointa, odpal w debug mode i zobacz co sie dzieje w tym kodzie. Przecież debuger nie gryzie, a nauka jego obsługi wymaga 30 sekund. Srsly, jaki to jest problem? o_O

0

Udało mi się rozwiązać problem. Przy dodawaniu wartości do mapy na rzecz Stringa wywołuje metodę trim(). Z jakiegoś powodu w wartościach mapy były dodane białe znaki.
odbieraj.mapa.put(odbieraj.name.trim(), odbieraj.ip);

Z debugerem się zapoznałem i faktycznie się przydaje. Jeżeli ktoś trafi na ten temat i będzie miał podobny problem to znaczy że wartości w mapie faktycznie się różnią choćby białymi znakami. Dziękuje za pomoc

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