2016-08-31 4 views
0

mit Bezug auf die ähnliche Frage. How to dynamically create Lists in java? Ich habe ein ziemlich ähnliches Problem mit der Person gefragt.Wie erstellt man Listen in Java ohne Duplikat?

In meinem Projekt habe ich Flugzeuge, Flughäfen und Passagiere für PNR-Datensatz

Der Passagierzielflughafen ist aus der Datenbank exportiert, aber dann muß ich es auf eine Liste des Ziels hinzufügen mit Namen, Flugzeugen.

So wird die Datenbank enthält wie

A380,JFK,PersonA and A380,JFK,PersonB and A330,LHR,PersonC

Mein Plan ist es, die Liste des Flughafens dynamisch aus der Datenbank zu erstellen und diesen Passagier mit dem gleichen Ziel, um es hinzuzufügen.

so habe ich peronsA und personB mit JFK werden sie in der gleichen Liste sein. Während in der LHR-Liste nur personC in LHR-Liste sein wird, wird es Hunderte von tausend Aufzeichnungen von solchen und Hunderte von Flughafen-Liste zu erstellen, so dass ich solche Liste dynamisch erstellen muss.

Aber Frage ishow ich feststellen, ob die Flughafen (JFK) Liste bereits beendet und nicht eine andere Liste für diesen bestimmten Flughafen erstellen? Oder gibt es eine andere Möglichkeit, Informationen zu speichern?

pesudo Code

while (dbrecord =true){ 
if(passenger.destination == "JFK"){ 
List<passenger> JFK(dynamic)= new ArrayList<passenger>(); 
JFK(dynamic).add(passenger) 
} 
+2

auf den Code der Suche, ich hoffe, dass dies für einige „Bildung Zuordnung“ ist; und nicht für ein echtes Produkt. Dein Code ist fehlerhaft (bist du sicher, dass er = true lesen sollte, und nicht == true dort, und ** schlimmer ** du ** ** ** niemals ** strings mit == vergleiche; du verwendest immer ** equals **) ; und Sie verstoßen gegen Java-Codierungsstil-Richtlinien. Ehrlich gesagt: wenn das "echt" ist; als Sie besser zurücktreten und verbrachte die nächsten ** Wochen ** Java Grundlagen zu lernen; bevor Sie überhaupt daran denken sollten, eine Produktionscodezeile zu berühren! – GhostCat

+1

Was ist das gemein 'if (Passagier.destination == "JFK") 'kann ersetzt werden durch' equals() ' –

Antwort

0

könnten Sie das durch einen Map<String, List<Passenger>> haben.

Bedeutung: Wenn Sie ein Ziel bearbeiten, fragen Sie die Karte, ob sie dieses Ziel enthält. Wenn ja, ist es schon ein Wert, der eine Liste ist; von nicht; Sie legen eine neue Liste für diesen Schlüssel, wie:

Map<String, List<Passenger>> listsByDestination = new HashMap<>; 

String destination = ... wherever 
if (listsByDestination.contains(destination)) { 
    ... already known 
} else { 
    listsByDestination.put(destination, new ArrayList<>()); 
} 

und so weiter.

Seite nicht: Ich habe Passenger in der Oberklasse, weil, gut Klassennamen beginnen UpperCase in Java.

+0

das String-Ziel kann wie eine Schleife aus einer Liste sein, so dass die Liste für jeden Flughafen auch dynamisch erstellt wird? – newbieprogrammer

+0

Das ist genau das, was mein Code tut, wenn Sie ihn in einen Loop setzen. – GhostCat

3

Ich bin nicht 100% sicher, ob ich das Szenario verstanden, aber der beste Weg, um Doppelarbeit zu vermeiden, ist eine Set-Struktur zu verwenden, wie HashSet

+3

Gut, diese Zeile im Kommentar und nicht als Antwort zu haben –

+2

Ich stimme völlig zu, lieber Jekin, aber aufgrund dieser Punktepolitik darf ich keine Kommentare veröffentlichen nur Antworten:/ – GKGeorgiev

0

So etwas könnte man

helfen
Map<String, List<Passenger>> pasengerMaps = new HashMap(); 
if(pasengerMaps.contains("JFK")){ 

pasengerMaps.get("JFK").add(passenger) 

}else{ 

pasengerMaps.put("JFK",new ArrayList<Passenger>()); 

} 
-1

Ich würde MultiMap aus Googles Guava-Bibliothek verwenden.

ListMultimap<String, Passenger> multimap = ArrayListMultimap.create(); 
multimap.put("destination",passenger1); 
multimap.put("destination",passenger2); 

Sie können Passagierliste von einigen bestimmten Ziel wie folgt retrive:

List<Passenger> passengerList = multimap.get("destination"); 
+0

Grund für die Down-Vote bitte. –

Verwandte Themen