Hallo zusammen Ich bin recht neu in Java habe früher Basic geschrieben und etwas "Arduino" Nun also Java :) Problem ich möchte massig Zahlen Sortieren und weiß noch nicht genau wie Also ich habe ein Objekt aus Id und zwei werten welche nachher sortiert werden sollen. Dabei sollen natürlich die Objekte aus den drei zahlen nicht durcheinander gebracht werden. Also zb Id 1,10,15 ID 2,15,20 ID 4,11,11 die Id dient wirklich nur als identi für mich nicht wirklich relevant für die Sortierung und es können id's fehlen... Also ich würde eine klasse erstellen aus drei int Dann vermutlich dieses zu einem obj Obj machen. Einheit einheit = new Einheit(10,20,30); Und aus dieses objekten dann ein Array erstellen Aber das erscheint mir sehr aufwändig? Gibt es da eine bessere Lösung? Die Zahlen sind erstmal Statisch die kann ich von Hand eintippen und es dürfte sich um gut 300 werte handeln. Später möchte ich sie eigentlich gerne mit einer festen Nummer identifizieren können zb if einheit[1].ID == 5
Nach was willst du denn sortieren? Du könntest, klar, erstmal eine Klasse schreiben um deine Daten zu halten. Es gibt in Java etwas "arrayartiges", das seine gespeicherten Elemente selber sortieren kann. Da gibt es LinkedLists, Maps und Collections. Eines davon kann sich selber sortieren, du mußt lediglich eine Funktion implementieren anhand der der Sortieralgorithmus größer als/kleiner als/gleich abfragen kann. Wenn man Objektorientierung noch nicht verstanden hat klingt das nach sauviel Arbeit-aber du kannst mir glauben, die einzige Arbeit ist das Verstehen von OOP (zugegeben, das dauert auch ein wenig). Aber das lohnt sich.
Einen Buchtipp hätte ich noch für dich: Einmal Java speziell: Toll zum Verständnis was eine Klasse, ein Interface, usw. ist-und es ist sehr gut zu lesen und toll für das Verständnis. https://www.amazon.de/Java-von-Kopf-bis-Fu%C3%9F/dp/3897214482/ref=sr_1_1/257-0509111-5855225?ie=UTF8&qid=1507985702&sr=8-1&keywords=java+von+kopf+bis+fu%C3%9F Und hier, was man mit Klassen und Interfaces Schönes machen kann, sollte man gleich nach Java von Kopf bis Fuß lesen. Bezieht sich zwar erstmal nur auf Java und wird auch nur mit Java erklärt, die meisten Konzepte lassen sich aber auch auf andere Programmiersprachen übertragen. https://www.amazon.de/Entwurfsmuster-von-Kopf-bis-Fu%C3%9F/dp/3955619869/ref=sr_1_2/257-0509111-5855225?ie=UTF8&qid=1507985702&sr=8-2&keywords=java+von+kopf+bis+fu%C3%9F
1 | public class Deleteme { |
2 | |
3 | public static void main(String[] args) { |
4 | List<Einheit> werte = Arrays.asList(new Einheit(1, 1, 9), |
5 | new Einheit(2, 2, 8), new Einheit(3, 3, 7), |
6 | new Einheit(4, 4, 6), new Einheit(5, 5, 5), |
7 | new Einheit(6, 6, 4), new Einheit(7, 7, 3), |
8 | new Einheit(8, 8, 2), new Einheit(9, 9, 1)); |
9 | |
10 | werte.sort(Comparator.comparing(Einheit::getWert2)); |
11 | System.out.println("werte = " + werte); |
12 | |
13 | List<Einheit> wert2groesserals4sortiertnachIdAbsteigend = werte.stream() |
14 | .filter(e -> e.getWert2() > 4) |
15 | .sorted((o1, o2) -> o2.getId().compareTo(o1.getId())) |
16 | .collect(Collectors.toList()); |
17 | System.out.println("anders sortiert = " + wert2groesserals4sortiertnachIdAbsteigend); |
18 | |
19 | int summeAllerWert1 = werte.stream().mapToInt(Einheit::getWert1).sum(); |
20 | System.out.println("summeAllerWert1 = " + summeAllerWert1); |
21 | |
22 | double durchschnittWert2 = werte.stream().mapToInt(Einheit::getWert2).average().orElse(0d); |
23 | System.out.println("durchschnittWert2 = " + durchschnittWert2); |
24 | } |
25 | |
26 | } |
27 | |
28 | class Einheit { |
29 | |
30 | private final Integer id; |
31 | private final Integer wert1; |
32 | private final Integer wert2; |
33 | |
34 | public Einheit(Integer id, Integer wert1, Integer wert2) { |
35 | this.id = id; |
36 | this.wert1 = wert1; |
37 | this.wert2 = wert2; |
38 | } |
39 | |
40 | public Integer getId() { |
41 | return id; |
42 | } |
43 | |
44 | public Integer getWert1() { |
45 | return wert1; |
46 | } |
47 | |
48 | public Integer getWert2() { |
49 | return wert2; |
50 | } |
51 | |
52 | @Override |
53 | public String toString() { |
54 | return "Einheit{" + "id=" + id + ", wert1=" + wert1 + ", wert2=" + wert2 + '}'; |
55 | } |
56 | |
57 | } |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.