Beste Methode zum Speichern von Ländercodes, Namen und Kontinent in Java

7

Ich möchte eine List oder Array einer Art haben und diese Informationen über jedes Land speichern:

  • 2-stelliger Code
  • Ländername wie Brasilien
  • Kontinent / Region der Welt wie Osteuropa, Nordamerika usw.

Ich werde jedes Land manuell in die Region / den Kontinent einteilen (aber wenn es eine Möglichkeit gibt, dies automatisch zu tun, lass es mich wissen). In dieser Frage geht es darum, wie man die Länder speichert und auf sie zugreift. Zum Beispiel möchte ich alle Länder in Nordamerika abrufen können.

Ich möchte keine lokalen Textdateien verwenden, da dieses Projekt mithilfe von Google Web Toolkit in JavaScript konvertiert wird. Aber in einer Enum oder einer anderen Ressourcendatei zu speichern, getrennt von dem Rest des Codes, ist das, wonach ich wirklich suche.

    
Click Upvote 03.04.2009, 12:12
quelle

5 Antworten

5

Es gibt 246 Länder in ISO 3166, Sie könnten auf dieser Grundlage eine Relais-Enumnummer erhalten. Ich bevorzuge XML-Datei mit einer Liste von Ländern, können Sie eine von Ссылка herunterladen und laden Sie sie (z. B. wenn App gestartet wird). Dann, wie Sie sie in GWT brauchen, laden Sie sie als RPC-Aufruf in den Hintergrund, aber denken Sie daran, diese (irgendeine Art von Lazy Loading) zwischenzuspeichern, so dass Sie nicht jedes Mal mit dem Laden fertig sind. Ich denke, das wäre sowieso besser, als sie im Code zu halten, da Sie jedes Mal, wenn auf das Modul zugegriffen wird, mit dem Laden der vollständigen Liste fertig werden, selbst wenn der Benutzer diese Liste nicht verwenden muss.

Sie brauchen also etwas, das das Land enthält:

%Vor%

Für GWT müsste diese Klasse IsSerializable implementieren. Und Sie können diese auf der Serverseite laden mit:

%Vor%

Wenn Sie nach einem ISO 2-Buchstabencode suchen müssen, werden Sie die Liste wahrscheinlich nicht ändern. Wenn Sie, wie Sie erwähnt haben, separate Länder nach Kontinent benötigen, können Sie XML aus ISO 3166 erweitern und eigene Elemente hinzufügen. Überprüfen Sie einfach ihre (ISO-Website) Lizenz.

    
Konrad 03.04.2009, 13:34
quelle
13

Mach einfach ein enum namens Country. Java-Enums können Eigenschaften haben, daher gibt es Ihren Ländercode und Ihren Namen. Für den Kontinent wünschen Sie sich wahrscheinlich ein anderes enum.

%Vor%

Für das Speichern und den Zugriff wäre eine Karte für jedes der Felder, nach denen Sie suchen werden, die auf diesem Feld eingegeben werden, die Standardlösung. Da Sie für den Kontinent mehrere Werte haben, müssen Sie entweder Map<?, List<Country>> oder eine Multimap-Implementierung, z. von Apache Commons.

    
Michael Borgwardt 03.04.2009 12:26
quelle
4

Wenn Sie häufig nach Kontinenten suchen müssen, mache ich einfach eine Reihe unveränderlicher Listen, eine für jeden Kontinent, und beziehe sie entsprechend. Die Liste der Länderdaten für einen Kontinent wird sich wahrscheinlich nicht häufig genug ändern, so dass die Kosten für die Neuerstellung eines solchen Arrays neu berechnet werden müssen, wenn etwas geändert werden muss.

Wenn Sie bereit sind, die Land-Kontinent-Klassifizierung manuell durchzuführen, ist der Rest automatisch und kann programmgesteuert erfolgen.

John Feminella 03.04.2009 12:17
quelle
2

Dies ist am einfachsten, wenn Sie die Land- / Kontinentstruktur in Java mithilfe einer Karte (oder einer anderen Sammlung) erstellen und diese anschließend mit XStream beibehalten

Dadurch wird eine XML-Repräsentation der Sammlung erstellt, und Sie können sie sehr einfach in Ihren Prozess einlesen und in denselben Sammlertyp konvertieren, den Sie ursprünglich erstellt haben. Da es XML ist, können Sie es auch außerhalb des Codes bearbeiten. d. h. gerade in einem Texteditor.

Weitere Informationen finden Sie im XStream-Lernprogramm .

    
Brian Agnew 03.04.2009 13:40
quelle
0

Die Verwendung des Locale-Objekts ist die beste Lösung, die ich mir vorstellen kann, Sie müssten nichts speichern. Aber wenn Sie GWT verwenden, versuchen Sie dies auf der Serverseite zu tun, da einige sagen, dass Sie es auf der Client-Seite nicht richtig funktionieren (da es in Javascript übersetzt wird), können Sie sie wie angegeben an den Client in einem RPC senden vorher.

    
zeacuss 19.01.2012 01:24
quelle