Ich möchte eine List
oder Array
einer Art haben und diese Informationen über jedes Land speichern:
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.
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.
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.
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.
Locale.getISOCountries()
, um die Liste der Ländercodes. Locale.getDisplayCountry()
um den Anzeigenamen für jedes Land zu erhalten. 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 .
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.
Tags und Links java arrays hashmap linked-list treemap