Forum: PC-Programmierung Java Anfänger beste art Obj Array


von Gerd (Gast)


Lesenswert?

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

von Wühlhase (Gast)


Lesenswert?

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.

von Wühlhase (Gast)


Lesenswert?

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

von foo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.