Anzeige

Liste aus Textdatei nach Klasse sortieren


#1
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");
            }
  
        }
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#2
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
 
#3
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
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#4
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
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#8
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
 
Anzeige

Neue Beiträge

Anzeige