Collections (Unbekannte) Liste Sortieren

Gossi

Bekanntes Mitglied
Schönen Guten Tag, hab mal wieder ne Frage:

Ich habe in der Datenbank 2 Tabellen, eine beinhaltet SQL-Statements und eine beinhaltet, ob bei den Statements noch Variablen gesetzt werden müssen.

In Java bekomme ich nun also das Ergebnis des in Tabelle 1 eingetragenen Statements, zur verdeutlichung nen kleines Beispiel:

Tabelle 1:
ID|STATEMENT
1|select * from test_tabelle where besitzer = :besitzer

Tabelle 2:
ID|VAR_NAME|DEFAULT_VALUE
1|Besitzer|Gossi

TEST_TABELLE
ID|BESITZER|ORT|HAUSNUMMER
1|Gossi|Bassum|1
2|Gossi|Syke|2
3|Gossi|Bassum|3
4|Belzebub|Syke|5
5|Gossi|Bassum|9
6|Gossi|Syke|121
7|Belzebub|Bassum|53
8|Gossi|Bassum|63
9|Gossi|Bassum|14

Ich bekomme also eine Liste mit folgenden Werten (Sofern Besitzer auf Gossi gesetzt wird):
ID|BESITZER|ORT|HAUSNUMMER
1|Gossi|Bassum|1
2|Gossi|Syke|2
3|Gossi|Bassum|3
5|Gossi|Bassum|9
6|Gossi|Syke|121
8|Gossi|Bassum|63
9|Gossi|Bassum|14

Jetzt möchte ich aber, dass nur einmal Gossi erscheint und nur einmal Bassum und Syke, also so:

ID|BESITZER|ORT|HAUSNUMMER
1|Gossi|Bassum|1
3|||3
5|||9
8|||63
9|||14
2||Syke|2
6|||121

Und an diesem Punkt hängt es leider, hier nochmal nen kleiner Teil Code:

Main-Klasse: Abrufen der Daten (ID gibt die ID des Statements an und varList ist eine Liste mit Variablen)
Java:
List<General> attrList = generalManager.getQuery(id, varList);

Das ganze würde für das oben genannte Beispiel so aussehen:
Java:
List<AnzeigeVar> varList = new ArrayList<AnzeigeVar>();
AnzeigeVar var = new AnzeigeVar("Gossi"); //Sind noch nen paar Attribute mehr, aber das sprengt den Rahmen ^^
List<General> attrList = generalManager.getQuery(1, varList);

Nun nochmal meine Frage:
Wie kann ich es erreichen, das er die Liste Sortiert und zusammenfass, da es ja mehrere Statements gibt die immer unterschiedliche Listen zurück geben, mit unterschiedlicher Spaltenanzahl und unterschiedlichen Werten :bahnhof:

EDITH:
Mehr Code:

General-Klasse
Java:
package de.narz.portalweb.anzeige.domain;

import java.util.List;

public class General {

    private List<GeneralValue> param;
    private List<String> spaltenNamen;

    public List<GeneralValue> getParam() {
        return param;
    }

    public void setParam(final List<GeneralValue> param) {
        this.param = param;
    }

    public List<String> getSpaltenNamen() {
        return spaltenNamen;
    }

    public void setSpaltenNamen(final List<String> spaltenNamen) {
        this.spaltenNamen = spaltenNamen;
    }

}

GeneralValue:
Java:
package de.narz.portalweb.anzeige.domain;

public class GeneralValue {

    private String name;
    private String value;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(final String value) {
        this.value = value;
    }

}
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wie soll man anhand EINES Abfrage-Beispiels überlegen, was der Code in verschiedenen Fällen leisten muss?
gibt es die Vorgabe, dass die Spalten immer von links nach rechts sortiert werden?

in deinem Beispiel könnte man ja auf die Idee kommen, nach Hausnummer zu sortieren und für mehrere Straßen mit derselben Hausnummer diese Hausnummer statt der Sraße wegzulassen..

----

im Allgemeinen ist es nur Sortieren, Comparator wählt die Spalte,
und dann die Daten anschauen, bei gleichen Werten den hinterten streichen, bzw. vielleicht noch irgendwo merken falls später erneut zu sortieren ist, Alternative [c]boolean anzeigen= true/false[/c],
das ist was für eine Schleife, if/else, Temp-Variablen usw., gute alte Handarbeit, da kann man nicht viel sagen,
anfangen ;)
 

Gossi

Bekanntes Mitglied
Wie bekomme ich es dabei hin, dass die Liste nach [c]general.getParam.getValue()[/c] Sortiert wird?

Meine Überlegung war es, für jeden Wert in Spalte 1 eine eigene Liste zu machen, für Splte 2 genauso usw.

also Sowas

ID|BENUTZER|ORT|HAUSNUMMER
1|Gossi|Bassum|1
3|Gossi|Bassum|3
5|Gossi|Bassum|9
8|Gossi|Bassum|14
9|Gossi|Bassum|63

ID|BENUTZER|ORT|HAUSNUMMER
2|Gossi|Syke|2
6|Gossi|Syke|121

ID|BENUTZER|ORT|HAUSNUMMER
7|Belzebub|Bassum|53

ID|BENUTZER|ORT|HAUSNUMMER
4|Belzebub|Syke|5

Aber darunter leided die Performance wahrscheinlich, oder?

zumal ich aus diesen Listen dann wieder eine gemeinsame machen müsste....

Und nicht zu vergessen müsste ich für jede weiter Spalte noch eine Liste erstellen ???:L
 
S

SlaterB

Gast
wenn die Daten erst aus der DB kommen, kannst sie danach 1000mal ins letzte Byte zersägen und neu zusammenbauen, das kosten praktisch keine zusätzliche Zeit, sowieso langsam

----

Sortierung ist ein Standard-Thema, General kann Comparable sein oder du verwendest einen separaten Comparator,
sofern du nicht zu kennen gibst dort irgendwas zu wissen und bisschen beschreibst inwiefern dann noch eine Frage offen ist,
sehe ich wenig zu sagen

Java Comparator Example | Java Tutorials and Examples
 

Gossi

Bekanntes Mitglied
Also, ich hab jez nen Comparator geschrieben, der sieht so aus:

Java:
public class RowComparator implements Comparator {

	@Override
	public int compare(final Object gen1, final Object gen2) {

		General row1 = (General) gen1;
		General row2 = (General) gen2;

		if (row1.getParam().get(0) != null && row2.getParam().get(0) != null) {
			if (row1.getParam().get(0).getValue()
					.equals(row2.getParam().get(0).getValue())) {
				return 0;
			}
			int count = 0;
			for (char c : row1.getParam().get(0).getValue().toCharArray()) {
				if (c < row2.getParam().get(0).getValue().charAt(count)) {
					return -1;
				} else if (c > row2.getParam().get(0).getValue().charAt(count)) {
					return 1;
				}
				count++;
			}
		}
		return 0;
	}

}

Funktioniert alles bestens, aber wenn ich jetzt versuche ne Prüfung für die zweite Spalte hinzuzufügen, schmeißt er die erste Sortierung ja wieder auseinander :bahnhof:

Habs versucht mit ner for-Schleife die gleich alle Spalten prüft, aber das ging, wie geschrieben, in die Hose.....
 
S

SlaterB

Gast
nebenbei:
Zwischenvariablen sind erlaubt,
definiere doch [c]v1 = row1.getParam().get(0).getValue()[/c]
statt jedesmal so langen Code zu schreiben

String hat übrigens eine fertige compare-Methode

-----

und der Weg für mehrere Spalten lautet:
Java:
int c = compareValues(0); // 0 = Index, erste Spalte
if (c != 0) return c;
c = compareValues(1); 
if (c != 0) return c;
c = ..
usw., gerne mit Schleife und was immer hilft,
der Reihe nach vergleichen, aber nur weitermachen wenn bisher alles gleich war
 
N

nillehammer

Gast
Bei einfachen Sortierkriterien kann man den Code noch selbst implementieren. Bei kombinierten Sortierkriterien wird es (wie Du ja auch schon festgestellt hast) schnell hässlich. Gerade bei sowas hilft der CompareToBuilder von apache commons-lang (Lang - Home). Bei dem appended man die Kriterien in der Reihenfolge der Sortierrelevanz (z.B. erst nach Ort und dann nach Hausnummer sortieren). Das sieht dann ungefähr so aus:
[Java]
...
return new CompareToBuilder().append(first.getOrt(), second.getOrt).append(first.getHausnr(), second.getHausnr()).toComparison();
[/Java]
 

Gossi

Bekanntes Mitglied
Ok, editieren is ja nu nich mehr, hab nu den Comparator fertig:

Java:
public class RowComparator implements Comparator {

	@Override
	public int compare(final Object gen1, final Object gen2) {

		General row1 = (General) gen1;
		General row2 = (General) gen2;

		if (row1.getParam().get(0) != null && row2.getParam().get(0) != null) {
			int paramNr = row1.getParam().size();
			if (paramNr == 1) {
				return new CompareToBuilder().append(
						row1.getParam().get(0).getValue(),
						row2.getParam().get(0).getValue()).toComparison();
			}
			if (paramNr == 2) {
				return new CompareToBuilder()
						.append(row1.getParam().get(0).getValue(),
								row2.getParam().get(0).getValue())
						.append(row1.getParam().get(1).getValue(),
								row2.getParam().get(1).getValue())
						.toComparison();
			}
			if (paramNr >= 3) {
				return new CompareToBuilder()
						.append(row1.getParam().get(0).getValue(),
								row2.getParam().get(0).getValue())
						.append(row1.getParam().get(1).getValue(),
								row2.getParam().get(1).getValue())
						.append(row1.getParam().get(2).getValue(),
								row2.getParam().get(2).getValue())
						.toComparison();

			}

		}
		return 0;
	}

}

Ja Slater, Zwischenvariablen sind erlaubt, ich weiß ^^

So, Sortierung funktioniert nun richtig, danke euch allen für die Hilfe.
 
N

nillehammer

Gast
Hallo Gossi,
eine kleine Verbesserung noch. Comparator ist generisch. Schreibe also:
[Java]
... implements Comparator<General>
[/Java]
Entsprechend wäre die Signatur der compare-Methode dann:
[Java]
@Override
public int compare(final General gen1, final General gen2) {
[/Java]
Das Casten in Zeile 6 und 7 kannst Du Dir dann sparen und die Methode wird typsicherer... hmm irgendwie hab ich grad ein DejaVu. Fehlt jetzt nur noch SlaterB mit seinem Hinweis :D

Und noch ein Hinweis zu Deiner Implementierung mit der verschiedenen Parameteranzahl. Das kann man so machen und vordergründig funktionert das auch. Beachte aber, dass compare Kommutativ sein muss, sprich compare(x, y) muss das gleiche Ergebnis liefern wie compare(y, x). Das ist bei Dir nur gegeben, wenn die paramNr bei beiden gleich ist.

Edit://Obwohl, ich seh grad, wenn sie das nicht ist, fliegt sowieso eine IndexOutOfBoundsException. Also vergiss es für diesen Fall und behalte es nur im Hinterkopf.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Interpreter-Fehler unbekannte Exception Allgemeine Java-Themen 12
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
T Unbekannte Fehlermeldung + Lösung? Allgemeine Java-Themen 4
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
M Verschachtelte Schleifen (unbekannte Tiefe) Allgemeine Java-Themen 3
thE_29 Externe (unbekannte) Klasse nutzen Allgemeine Java-Themen 11
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
J Zeichenketten-Liste filtern Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K Liste aller implementierenden Klassen einer Oberklasse anzeigen Allgemeine Java-Themen 4
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
reibi Kopie einer Liste Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben