Inhalte aus einem Array in eine Liste sortiert einfügen

Hacer

Aktives Mitglied
Hallo zusammen,
Ich muss eine Methode sortiertEinfügen(Element[] data) implementieren, die alle Inhalte aus dem übergebenen Array aufsteigend nach der Länge der Liste sortiert in eine Liste einfügt. Es kann auch Zellen enthalten, die leer sind.
Ich habe keinen Plan wie ich solch eine Aufgabe lösen kann.
 

Hacer

Aktives Mitglied
Ich würde das Array erstmal durchlaufen mit einer for-Schleife :D und vielleicht überprüfen, ob es leere Zellen gibt, wenn ja diese entfernen??
 

Hacer

Aktives Mitglied
geht das vielleicht wenn man das Array erstmal da einfügt und dann sortiert, weil die Liste ja auch unsortiert sein könnte :confused::oops:
 

Meeresgott

Bekanntes Mitglied
Ich würde erst das Array einer List Übergeben und mit dem Iterator dann alle Objekte der List durchgehen und wenn es ein "Leeres Objekt" (null) ist es dann entfernen.
Das sortieren kannst du danach machen mit einer List ist das recht einfach umzusetzen.

viele Grüße
 

Neumi5694

Top Contributor
Elemente aus dem Array entfernen geht natürlich nicht. Du kannst sie beim Durchlaufen höchstens überspringen.

Von Array -> Liste gibt's mehrere Möglichkeiten, z.b. Arrays.asList(...)
Danach gibt's auch wieder mehrere Möglichkeiten, die Null-Objekte aus der Liste zu entfernen, empfehlen würde ich list.removeAll(Collections.singleton(null))
Kommen mehrere Filter zum Zuge und nicht nur eine Nullprüfung, dann durchlaufe die Liste von hinten nach vorne per Index und entferne deine Kandidaten. Von hinten nach vorne deshalb, damit du kein Index-Problel kriegst, wenn du ein Element entfernst (und so ganz nebenbei musst du die Größe der Liste nur einmal für den Startwert des Index abfragen, das drückt die Ausführzeit nach unten). Verwende keine for-each Schleife, wenn du während einer solchen Elemente entfernst, dann kriegst du zurecht eine Exception.

Willst du modern arbeiten, dann streame dein Array und filtere die Elemente raus.
Code:
Arrays.stream(aaa).filter(aElement -> (/**Bedingung zum Weiterleiten, z.B. aElement != null**/)).collect(Collectors.toList());
Ich persönlich mag das nicht sonderlich, gerade im Vergleich zu Arrays ist ein Stream außerdem ziemlich langsam. Aber es ist nun mal der neue way-2-go.
Das Ding danach noch zu sortieren, sollte kein Problem sein, die Collections-Klasse bietet da vorgefertigte Funktionen. Du musst dich nur noch mit Comparatoren auseinandersetzen.
 

Hacer

Aktives Mitglied
Hier ist die Aufgabe mit den dazugehörigen Codes. Und danke :D
 

Anhänge

  • 20160928_173144.jpg
    20160928_173144.jpg
    3,3 MB · Aufrufe: 48
  • 20160928_173130.jpg
    20160928_173130.jpg
    2,2 MB · Aufrufe: 43

Flown

Administrator
Mitarbeiter
Mit Länge der Inhalte ist die Länge des Strings im Payload gemeint nehm ich mal an oder?

Was hast du derweil für einen Ansatz?
 
X

Xyz1

Gast
Bitteschön:
Absteigend:
Java:
import java.util.*;

/**
* @author
*/
public class JavaApplication5 {

    public static void main(String[] args) {
        SpaßMitListenUndMitArrays smluma = new SpaßMitListenUndMitArrays();
        smluma.sortiertEinfuegen(null);
        smluma.sortiertEinfuegen(new String[][]{});
        smluma.sortiertEinfuegen(new String[][]{{}});
        smluma.sortiertEinfuegen(new String[][]{null, {"sehr"}, {"kreativ", "sein"}, {"ist"}, {"das", "nicht", "immer"}, null});
        smluma.sortiertEinfuegen(new String[][]{{"hallo"}});
        smluma.sortiertEinfuegen(new String[][]{{"lang"}, {"wei"}, {}, {"lig"}});
        smluma.llsa.stream().forEach((strings) -> {
            System.out.println(Arrays.toString(strings));
        });
    }
}

class SpaßMitListenUndMitArrays {

    LinkedList<String[]> llsa = new LinkedList<>();

    void sortiertEinfuegen(String[][] data) {
        if (data == null || data.length == 0) {
            return;
        }
        Arrays.sort(data, (String[] o1, String[] o2) -> {
            if (o1 == null) {
                if (o2 == null) {
                    return 0;
                } else {
                    return +1;
                }
            } else if (o2 == null) {
                return -1;
            } else {
                return o2.length - o1.length; // aufpassen
            }
        });
        int i = 0, j = 0;
        while (i < data.length) {
            if (data[i] == null /* || data[i].length == 0 */) {
                return;
            }
            while (j < llsa.size() && data[i].length <= llsa.get(j).length) {
                j++;
            }
            llsa.add(j, data[i]);
            i++;
        }
    }
}

Code:
[das, nicht, immer]
[kreativ, sein]
[sehr]
[ist]
[hallo]
[lang]
[wei]
[lig]
[]
[]

Aufsteigend:
Java:
import java.util.*;

/**
* @author
*/
public class JavaApplication5 {

    public static void main(String[] args) {
        SpaßMitListenUndMitArrays smluma = new SpaßMitListenUndMitArrays();
        smluma.sortiertEinfuegen(null);
        smluma.sortiertEinfuegen(new String[][]{});
        smluma.sortiertEinfuegen(new String[][]{{}});
        smluma.sortiertEinfuegen(new String[][]{null, {"sehr"}, {"kreativ", "sein"}, {"ist"}, {"das", "nicht", "immer"}, null});
        smluma.sortiertEinfuegen(new String[][]{{"hallo"}});
        smluma.sortiertEinfuegen(new String[][]{{"lang"}, {"wei"}, {}, {"lig"}});
        smluma.llsa.stream().forEach((strings) -> {
            System.out.println(Arrays.toString(strings));
        });
    }
}

class SpaßMitListenUndMitArrays {

    LinkedList<String[]> llsa = new LinkedList<>();

    void sortiertEinfuegen(String[][] data) {
        if (data == null || data.length == 0) {
            return;
        }
        Arrays.sort(data, (String[] o1, String[] o2) -> {
            if (o1 == null) {
                if (o2 == null) {
                    return 0;
                } else {
                    return +1;
                }
            } else if (o2 == null) {
                return -1;
            } else {
                return o1.length - o2.length; // aufpassen
            }
        });
        int i = 0, j = 0;
        while (i < data.length) {
            if (data[i] == null /* || data[i].length == 0 */) {
                return;
            }
            while (j < llsa.size() && data[i].length >= llsa.get(j).length) {
                j++;
            }
            llsa.add(j, data[i]);
            i++;
        }
    }
}

Code:
[]
[]
[sehr]
[ist]
[hallo]
[lang]
[wei]
[lig]
[kreativ, sein]
[das, nicht, immer]

Das ist doch recht Umfangreich, aber besser geht s nicht. Dafür gibt s ne 1.
 

Hacer

Aktives Mitglied
also ich habe zwar einen Ansatz. Wollte dann die neue Liste, die entsteht einfach in die alte Liste einfügen und dies dann null setzen.
Java:
public void addSorted(Payload[] data){
     Element node =firstElement;
     List neueListe =new List();
    
     for(int i=0; i<data.length&&node!=null; i++){
               if(node.data[i]< node.getValue()){
                     neueListe.add(i);
}
}}
 

Neue Themen


Oben