Sortieren in Java Bibliothek



  • Hallo,

    habe

    List<Point> lstPoints;
    

    Point hat die Datenmember x und y. Jetzt möchte ich z.B. die Liste nach x sortieren. Wie macht man das in Java. Collections.sort kenn ich. Muss ich da Point von Comparable ableiten ? Kein Bock das jetzt selber zu implementieren.



  • Endweder Comparable implementieren oder einen Comparator schreiben.



  • Wenn du mehr als eine property sortieren willst dann geht das nur mit dem Comparator !



  • lstPoints.stream()
    .sorted((p1, p2) -> Integer.compare(p1.getX(), p2.getX()))
    .forEach(System.out::println);
    


  • MIr ist das echt zu kompliziert. Kein Wunder dass das viele nicht verstehen.
    Wo kann man beim Aufruf überhaupt angeben wonach man sortieren möchte.

    Das sieht ja immer so aus:

    Collections.sort(mylist, null);
    

    Bei der Klasse

    class Person
    {  int alter;
       String name;
       double groesse;
    }
    

    Sowas geht ja wohl nicht:

    Collections.sort(mylist, Person.alter);
    

    Ich möchte nach alter sortieren.



  • Und die Klasse Person würde ja irgendwie so aussehen.

    public class Person implements Comparator {
    	int alter;
    	String name;
    	double groesse;
    
    	@Override
    	public int compare(Object arg0, Object arg1) {
    
    		return 0;
    	}
    
    }
    


  • Vielleicht versteh ich das auch total falsch.

    Also ich will nicht das Verhalten haben dass z.B. wenn 2 Personen gleich alt sind dann nicht Gewicht sortiert wird . Nein ich möchte ganz unabhängig entweder nach alter oder Gewicht sortieren.



  • Die Klasse Person sollte nicht Comparator sondern Comparable implementieren. Dann ist das Vergleichsverhalten jedoch erst mal immer dasselbe.

    Unterschiedliche Sortierungen erreicht man tatsächlich durch die korrekte Verwendung eines oder mehrerer Comparator-Exemplare. Da Java 8 uns mit Lambda-Ausdrücken gesegnet hat, würde ich diese nicht als seperate Klassen oder anonyme Klassen anlegen, sondern es wie folgt schreiben:

    Collections.sort(personenList, (p1, p2) -> Integer.compare(p1.alter, p2.alter));
    

    Das entspricht dieser Variante in älteren Java-Versionen:

    Collections.sort(pList, new Comparator<Person>(){
        @Override
        public int compare(Person p1, Person p2)
        {
            return Integer.compare(p1.alter, p2.alter);
        }
    });
    


  • Woher kommt eigentlich der Name Lambda Expression. Der Name ist sovielsagend wie Alpha Expresssion oder was weiss ich. Totale Fehlbenneung meiner Ansicht nach.



  • Der Name kommt aus der funktionalen Programmierung und ist da ein fester Begriff.



  • Functional programming has its roots in lambda calculus, a formal system developed in the 1930s to investigate computability, the Entscheidungsproblem.



  • s.a. Anonyme Funktion (Lambda-Funktion) (in Anlehnung an das Lambda-Kalkül - hier noch ein weiterer Link: Lambda-Kalkül)


Log in to reply