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ć.
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.
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);
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ć.
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);
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>
Błędów nie ma wszystko ładnie pięknie ale nie zwraca numeru faktury , nic się nie wyśwyietla :|
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ć.
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]