Liste aus Textdatei nach Klasse sortieren

Cubeyy

Grünschnabel
Ich würde gerne meine Liste aus der Datei so sortieren,
das er mir folgendes Ausgeben würde:


Produkt
Name: xxx
ID: xxx

Produkt
Name: xxx
ID: xxx

Person
Name: xxx
ID: xxx

momentan gibt er bei mir alles so ein, wie es auch eingetragen wurde,
was auch logisch ist da die Datei unsortiert ist.

Bräuchte Hilfe..

Java:
for(Object obj:objectList) {
            if ( obj instanceof Product) {
                System.out.println("Produkt");
                System.out.println("Name: " + ((Nameable)obj).getName());
                System.out.println("ID:   " + ((Nameable)obj).getID() + "\n");
            } else if ( obj instanceof Person) {
                System.out.println("Person");
                System.out.println("Name: " + ((Nameable)obj).getName());
                System.out.println("ID:   " + ((Nameable)obj).getID() + "\n");
            }
  
        }
 
Hi,

folgendes vor deiner for-Schleife sortiert die Liste:
Collections.sort(objectList);

Oder um deine Liste aus verschiedenen Objekten nach dem Typ zu gruppieren:
Java:
Map<Class<?>, List<?>> grouped = objectList.stream().collect(Collectors.groupingBy(Object::getClass));

Warum speicherst du eigentlich überhaupt verschiedene Typen innerhalb einer Liste? Somit geht dir die Typsicherheit verloren und es können böse Fehler passieren.

Grüsse,
BK
 
Hi,

folgendes vor deiner for-Schleife sortiert die Liste:
Collections.sort(objectList);

Oder um deine Liste aus verschiedenen Objekten nach dem Typ zu gruppieren:
Java:
Map<Class<?>, List<?>> grouped = objectList.stream().collect(Collectors.groupingBy(Object::getClass));

Warum speicherst du eigentlich überhaupt verschiedene Typen innerhalb einer Liste? Somit geht dir die Typsicherheit verloren und es können böse Fehler passieren.

Grüsse,
BK

Erstmal Danke..

Sind meine Vorgaben bei einer Übungsaufgabe.

bei Collections.sort(objectList);
erkennt er aus irgendeinen Grund "sort" nicht.

"The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Object>)"

Wenn ich es mit (List<objectList>) mache,
kriege ich folgendes Syntax error on token ">", Expression expected after this token
 
Hi,

// Edit: Dein Problem besagt nur, dass Object nicht Comparable ist. Ein Cast auf List<Comparable> sollte dazu ausreichen. Aber ich sehe gerade in der Doku zu sort(), dass du hier wahrscheinlich eine ClassCastException erhalten wirst, weil du verschiedene Typen in der Liste hast. Probiers mal mit dem Collector oben nochmal.

Grüsse,
BK
 
Ich bekomme es halt damit nicht hin,
ich habe versucht es einzufügen

Type mismatch: cannot convert from Map
 
Hi,

dein Code? Bei mir gehts mit einer leichten Abwandlung, hatte vorher kein IntelliJ zur Hand:
Java:
package com.company;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Object> objectList = Arrays.asList(1L, 2, "foo", "baz", 42);
        Map<? extends Class<?>, List<Object>> grouped = objectList.stream().collect(Collectors.groupingBy(Object::getClass));
        for (Map.Entry<? extends Class<?>, List<Object>> foo : grouped.entrySet()) {
            System.out.print("Type: " + foo.getKey().getSimpleName() + " = ");
            for (Object bar : foo.getValue()) {
                System.out.print(bar + " ");
            }
            System.out.println();
        }
    }
}

Ausgabe:
Code:
Type: Integer = 2 42 
Type: Long = 1 
Type: String = foo baz

Grüsse,
BK
 
Zurück