Wyciąganie kluczy z HashMap

0

Mam plik(mała baza danych zawiera numer,nazwisko i pare innych rzeczy) tokenuje go i wyciągam potrzebne mi rzeczy czyli numer i nazwisko(w takiej kolejności) ładuje do mapy mapa.put(numer,nazwisko) Nazwiska się powtarzają numery nie dlatego numer to key a nazwisko to wartość teraz musze wyciągnać wszystkie numery danego nazwiska i zbytnio nie wiem jak to zrobić.

0

Trochę na okrągło. Najpierw użyj keySet. Dostaniesz listę wszystkich kluczy, następnie coś w te mańkę:

Set keys = map.keySet();
String searchValue = "Kowalski";
for(Integer key : keys){
  String name = map.get(key);
  if(name.equal(searchValue))
    out.println(key);
}

Generalnie idea jest taka by po prostu przejść po wszystkich elementach. Nie jest to może zbyt optymalne, ale proste i nie wymaga dodatkowych operacji.

0

Tyle że ten numer to jest zczytywany jak String bo to jest coś typu 07D11458
może wkleje mój kod

public static void main( String[] args) throws IOException {
            String wnazwisko;
            Map mapa =new HashMap();
            BufferedReader inputStream = null;
            PrintWriter outputStream = null; 
            BufferedReader klawiatura = new BufferedReader(
                new InputStreamReader(System.in));
            try {
            inputStream = 
                new BufferedReader(new FileReader("PILK"));
            outputStream = 
                new PrintWriter(new FileWriter("PLIK"));
           System.out.println("Podaj nazwisko klienta:");
           wnazwisko = klawiatura.readLine();  
           String f,g;
           g = inputStream.readLine();
           while ((f = inputStream.readLine()) != null) {
           StringTokenizer st = new StringTokenizer(f,"#'\"'");
           String faktura= st.nextToken();
           String klient= st.nextToken(); 
           mapa.put(klient,faktura);
0

ok. teraz wystarczy zamienić Integer na String. Koniec końców musisz najpierw i tak wybrać wszystkie klucze, a następnie po kolei każdy z nich sprawdzić.

0

Jak dokleiłem ten kod

  Set keys = mapa.keySet();
        String searchValue = wnazwisko;
        for(String key : keys)
        {String name = mapa.get(key);
        if(name.equals(searchValue))          
        System.out.println(key);

To mi wywala niezgodnośc typów
java incompatible types
found : java.lang.Object
required: java.lang.String
for(String key : keys)
.java incompatible types
found : java.lang.Object
required: java.lang.String
{String name = mapa.get(key);

0

ok. hm... w sumie jak piszesz w Javie 5 to powinieneś mieć warning przy kompilacji, że nie ma genericsów.:

Set<String> keys = mapa.keySet();
String searchValue = wnazwisko;
for(String key : keys){
        String name = mapa.get(key);
        if(name.equals(searchValue))         
            System.out.println(key);
}

teraz kompilator sam dokona potrzebnych rzutowań. Oczywiście o ile mapa jest zadeklarowana jako Map<String, String>

0

Błędów nie ma wszystko ładnie pięknie ale nie zwraca numeru faktury , nic się nie wyśwyietla :|

0

Czyżby nie było klucza na liście? Spróbuj napisać test. niech mapa zawiera jeden klucz i niech metoda spróbuje wyszukać ten klucz. Jak nie zadziała to trzeba by się temu dokładniej przyjrzeć.

0

A więc tak dałem

mapa.put("Ala","kot");
mapa.put("Kasia","pies");

i jak dawałem do wyszukiwania Ala nie działało , dałem do wyszukiwania kot działało wyświetlał Ala(czyli dalej na odwrót). Spróbowałem jeszcze raz z właściwym plikiemi nic w ogóle nie pykało a mapa była dziwnie mała zapisana do .txt powinna mieć 1,67MB a miała 22KB. Wycinało powtarzajace się , wcześniej tak robiło jak miałem mapa.put(faktura,klient); czyli wartości klient się powtarzały i je usuwało.
Zamieniłem na mapa.put(faktura,klient); i wszystko śmiga jak należy :D
Wielkie dzięki za pomoc!!!!!!!!!!!!!!!!!!!!!!! :)
[browar]

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