4 Stimmen

Gibt es eine Möglichkeit, Metadaten zu Java Collections hinzuzufügen?

Nehmen wir an, ich habe eine Sammlung von Objekten, die mit einer Reihe von verschiedenen Komparatoren auf der Grundlage der verschiedenen Felder des Objekts sortiert werden können. I

2voto

Martin Punkte 35108

Nicht für die Sammlungsschnittstelle, aber wenn Sie eine SortedSet gibt es eine comparator()-Methode, mit der Sie den Komparator abfragen können.

Andernfalls müssen Sie die von Ihnen verwendete Auflistungsklasse untergliedern, um die benötigten Zugriffsfunktionen hinzuzufügen.

1voto

Sean Owen Punkte 64909

Nein, das ist bei den Implementierungen nicht der Fall. Sie müssten es selbst verfolgen. Sie könnten eine Unterklasse einer Collection-Implementierung erstellen, um Felder hinzuzufügen, die diese Informationen enthalten.

Sie könnten die Implementierungen auch mit einer Map auf Metadaten abbilden, wie Sie möchten - insbesondere scheint es, dass Sie dies mit IdentityHashMap tun möchten, da Sie nicht zwei verschiedene Sammlungen als Schlüssel mit equals() auf Gleichheit verglichen werden sollen.

Ich würde einen Booleschen Wert (aufsteigend/absteigend) und einen Verweis auf den Comparator speichern, der für die Sortierung verwendet wird, wenn die Sortierung dadurch vollständig bestimmt wird. Oder wenn es nach Feld sortiert ist, speichern Sie einen String, der das Feld vielleicht benennt.

0voto

Carl Punkte 7410

Sicher:

Definieren Sie Methoden für Ihre dekorierten Collection<Foo>

public List<Comparator<Foo>> getComparators() { ... }

et

public int whichComparator() { ... }

die zurückgibt, welche Comparator wird derzeit von der List . Sie können es mit einer ausgefalleneren Map und einige sinnvolle Schlüssel (z. B. Enums - vielleicht sogar Enums, die die Komparatoren implementieren), wenn Sie ändern, welche Komparatoren während der Lebensdauer des Objekts verwendet werden könnten, aber ich denke, das oben genannte ist ein guter Anfang.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X