exCB
10. Februar 2024 um 10:24
1
Hallo,
was mache ich hier falsch? Eigentlich sollte es über 300 Elemente geben, es werden aber nur 2 Zeilen ausgegeben:
record DetailsElem(String s1, String s2, boolean api, TreeSet<String> concepts) {
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DetailsElem that = (DetailsElem) o;
return Objects.equals(s1, that.s1);
}
@Override
public int hashCode() {
return Objects.hash(s1);
}
}
public static void filterAllowed() throws IOException {
TreeSet<DetailsElem> details = new TreeSet<>((a, b) -> {
List<String> list_a = a.concepts().stream().toList();
List<String> list_b = b.concepts().stream().toList();
for (int i = 0, j = 0; i < list_a.size() && j < list_b.size(); i++, j++) {
int c = list_a.get(i).compareTo(list_b.get(j));
if (c != 0) {
return 0;
}
}
return list_b.size() - list_a.size();
});
JSONObject det = reqDetails();
JSONArray data = det.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject jo = data.getJSONObject(i);
details.add(new DetailsElem(
jo.getString("symbol"),
jo.getString("displayNameEn"),
jo.getBoolean("apiAllowed"),
new TreeSet<>(jo.getJSONArray("conceptPlate").toList().stream().map(Object::toString).toList())
));
}
details.forEach(System.out::println);
}
exCB
10. Februar 2024 um 11:19
2
Das ist echt schräg…
So würde es funktionieren (es werden keine Elemente entfernt):
record DetailsElem(String s1, String s2, boolean api, TreeSet<String> concepts) {
}
public static void filterAllowed() throws IOException {
List<DetailsElem> details = new ArrayList<>();
JSONObject det = reqDetails();
JSONArray data = det.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject jo = data.getJSONObject(i);
details.add(new DetailsElem(
jo.getString("symbol"),
jo.getString("displayNameEn"),
jo.getBoolean("apiAllowed"),
new TreeSet<>(jo.getJSONArray("conceptPlate").toList().stream().map(Object::toString).toList())
));
}
details.sort((a, b) -> {
List<String> list_a = a.concepts().stream().toList();
List<String> list_b = b.concepts().stream().toList();
for (int i = 0, j = 0; i < list_a.size() && j < list_b.size(); i++, j++) {
int c = list_a.get(i).compareTo(list_b.get(j));
if (c != 0) {
return 0;
}
}
int c = Integer.compare(list_b.size(), list_a.size());
if (c != 0) {
return c;
}
return a.s1().compareTo(b.s1());
});
System.out.println(data.length());
System.out.println(details.size());
details.forEach(System.out::println);
}
Aber wenn ich anstatt return a.s1().compareTo(b.s1());
return 0;
schreibe, bekomme ich:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
Wie kann man das umgehen?
Ich möchte ja eben, dass nur nach der concepts
-Liste sortiert wird, und falls diese gleich sind, soll nicht umsortiert werden.
Hat das etwas mit der Halbordnung zu tun?
Marco13
10. Februar 2024 um 12:02
3
Ich bin so kurz davor, diesen Thread zu löschen und dich 2 Wochen zu sperren. Stell’ die Frage richtig , so dass man sie beantworten kann, oder lass’s diesen lächerlichen Versuch bleiben, so zu tun, als würdest du dich für irgendwelche technischen (Programmier-) Inhalte interessieren.
Du hast einen Versuch, im nächsten Beitrag eine gute, sinnvolle Frage zu stellen, sonsten … timeout.
exCB
10. Februar 2024 um 12:09
4
Keinen Grund, sich aufzuregen. Wenn die Frage unerwünscht ist, dann bitte löschen. (Aber mich nicht sperren.)
Welche Informationen fehlen dir denn?
Marco13
10. Februar 2024 um 12:24
5
Keine gute, sinnvolle Frage → Sperre.
Aber nur bis Montag.
Also „Keinen Grund, sich aufzuregen“
1F595
exCB
12. Februar 2024 um 16:39
6
Inzwischen gelöst,
exCB:
return 0;
da sollte ein return c;
stehen (Typo).
exCB
13. Februar 2024 um 01:35
7
Ich muss mich erst daran gewöhnen, dass das, was die AI vorschlägt, manchmal auch falsch sein kann. Und man auch solche Antworten gegenprüfen muss.
Steckt ja noch in den Kinderschuhen…
Genau wie manche Forenteilnehmer.
exCB
16. Februar 2024 um 19:26
8
@Marco13 Der Schreibfehler war keine Absicht gewesen… Ist’s jetzt wieder gut?
exCB
17. Februar 2024 um 20:48
10
@mogel Tut mir leid, mit dir spreche ich nicht mehr. Ich wurde schon mal deinetwegen gesperrt.
Marco13
17. Februar 2024 um 23:29
11
@mogel Bitte sag’ mir, was du gemacht hast Ich will, dass er auch nicht mehr mit mir spricht. Aber *mit der flachen Hand ein paar mal seitlich an den Kopf haut* die Stimmen gehen nicht weg, und sie sagen dumme Sachen
1 „Gefällt mir“