Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Sökalternativ med Java

Hejsan!

Jag försöker skriva ett lite enklare program (INTE skoluppgift, så jag kan välja själv hur jag ska göra).
I programmet tänkte jag att användaren skall kunna söka på en person, användaren ska få välja om hen vill söka med namn eller personnummer

1) Sök med personnummer
2) Sök med efternamn

Jag gjorde en hashMap och då går det ju utmärkt att söka med personnummer, eftersom de är unika.
Nu undrar jag om någon har ett förslag hur jag borde göra om man vill söka med efternamn. Jag har tänkt att om du tex söker "Nilsson" så ska du få upp en lista på alla som heter Nilsson.
Är en vanlig arraylist att föredra, eller..?

Tack för din tid

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av JJ72:

Hejsan!

Jag försöker skriva ett lite enklare program (INTE skoluppgift, så jag kan välja själv hur jag ska göra).
I programmet tänkte jag att användaren skall kunna söka på en person, användaren ska få välja om hen vill söka med namn eller personnummer

1) Sök med personnummer
2) Sök med efternamn

Jag gjorde en hashMap och då går det ju utmärkt att söka med personnummer, eftersom de är unika.
Nu undrar jag om någon har ett förslag hur jag borde göra om man vill söka med efternamn. Jag har tänkt att om du tex söker "Nilsson" så ska du få upp en lista på alla som heter Nilsson.
Är en vanlig arraylist att föredra, eller..?

Tack för din tid

En Map fungerar här också, men varje efternamn (nyckel) kommer ge en lista på 0 eller fler personer, istället för en enstaka.

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Ok, tack så mycket för din hjälp

Men blir det inte så att om vi har tex två stycken som heter Nilsson, så skrivs bara den sista ut?
Hur är det med values()? Skulle man kunna använda detta på något produktivt sätt, eller är en till map att föredra (jag kom att tänka på risken för att missa något om man lägger till ett nytt namn)?

Tack igen

Trädvy Permalänk
Medlem
Registrerad
Dec 2011

Om din Map för Personnummer -> Person ser ut så här:

Map<String, Person> persNrMap = new HashMap<String, Person>()

Så kan din Map för Efternamn -> Personer se ut så här (tror det var så här som Teknocide menade):

Map<String, List<Person>> surnameMap = new HashMap<String, List<Person>>()

Då får du tillbaka en lista med alla personer med ett visst efternamn.

Trädvy Permalänk
Medlem
Registrerad
Dec 2014
Skrivet av tobijoh:

Om din Map för Personnummer -> Person ser ut så här:

Map<String, Person> persNrMap = new HashMap<String, Person>()

Så kan din Map för Efternamn -> Personer se ut så här (tror det var så här som Teknocide menade):

Map<String, List<Person>> surnameMap = new HashMap<String, List<Person>>()

Då får du tillbaka en lista med alla personer med ett visst efternamn.

Ahaa...

Ja, min första ser ut precis som den du skrev först. Jag var som sagt osäker på bästa lösningen om man skulle söka namn.

Jag bugar och tackar så mycket för hjälpen

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2008
Skrivet av JJ72:

Ahaa...

Ja, min första ser ut precis som den du skrev först. Jag var som sagt osäker på bästa lösningen om man skulle söka namn.

Jag bugar och tackar så mycket för hjälpen

Nu vet jag inte om det kommer vara intressant för dig men jag gjorde en liten enkel implementation på en sökning av efternamn. Jag satte det i spoilertaggar så att det inte förstör nöjet om du inte ännu har hunnit implementera din sökning ännu

private List<Person> search(String surname) { List<Person> listOfPerson = new ArrayList<>(); for (Person person : myPersonMap.keySet()) { if (person.getSurname().equals(surname)) listOfPerson .add(Person); // Om det är känsligt att // lämna ut en lista med // personobjekt kan du // kopiera/klona personobjekten först } return listOfPerson; }

Dold text

Om du har löst din kod på ett annat sätt kanske det kan vara roligt att se olika sätt att implementera det.

Trädvy Permalänk
Medlem
Registrerad
Dec 2014
Skrivet av Razki:

Nu vet jag inte om det kommer vara intressant för dig men jag gjorde en liten enkel implementation på en sökning av efternamn. Jag satte det i spoilertaggar så att det inte förstör nöjet om du inte ännu har hunnit implementera din sökning ännu

private List<Person> search(String surname) { List<Person> listOfPerson = new ArrayList<>(); for (Person person : myPersonMap.keySet()) { if (person.getSurname().equals(surname)) listOfPerson .add(Person); // Om det är känsligt att // lämna ut en lista med // personobjekt kan du // kopiera/klona personobjekten först } return listOfPerson; }

Dold text

Om du har löst din kod på ett annat sätt kanske det kan vara roligt att se olika sätt att implementera det.

Kul med flera lösningar:-)

Jag har inte hunnit lösa problemet än, det blir något att göra till kvällen

Tack för din tid och input. Mycket uppskattat

Jag återkommer när jag löst det, så får vi se hur jag gjorde

Trädvy Permalänk
Medlem
Registrerad
Dec 2014
Skrivet av Razki:

Nu vet jag inte om det kommer vara intressant för dig men jag gjorde en liten enkel implementation på en sökning av efternamn. Jag satte det i spoilertaggar så att det inte förstör nöjet om du inte ännu har hunnit implementera din sökning ännu

private List<Person> search(String surname) { List<Person> listOfPerson = new ArrayList<>(); for (Person person : myPersonMap.keySet()) { if (person.getSurname().equals(surname)) listOfPerson .add(Person); // Om det är känsligt att // lämna ut en lista med // personobjekt kan du // kopiera/klona personobjekten först } return listOfPerson; }

Dold text

Om du har löst din kod på ett annat sätt kanske det kan vara roligt att se olika sätt att implementera det.

Lite sent svar kanske, men jag gjorde såhär

HashMap<String, Person>map = new HashMap<>(); ArrayList<Person>list = new ArrayList<>(); Person p1 = new Person("Wallace", "Mia", "19760907-1111", "Texas"); Person p2 = new Person("Wallace", "Marcellus", "19750427-2222", "Utah"); Person p3 = new Person("Coolidge", "Butch", "20030730-3333", "New York"); list.add(p1); list.add(p2); list.add(p3); map.put("7609071111", p1); map.put("7504272222", p2); map.put("0307303333", p3);

Jag hoppas det hjälper någon