Hallo zusammen,
ich hänge gerade an den Lambdas in Verbindung mit Comparatoren :-D
Hab mir eine kleine Klasse Pair geschrieben die einfach ein Pärchen speichert.
Nun habe ich ein Pärchen erstellt mit String und Integer 🙂 und 2 Comparatoren mit Lambda geschrieben die nach T und nach U sortiert werden (also die Pärchen).
Doch wenn ich einen eigenen Referenztyp nehme klappt das ganze nicht mehr da ich keine compareTo Methode mehr habe.
Deswegen möchte ich den Lambda - Ausdruck über die Wildcards so zum Beispiel einschränken damit Vorausgesetzt ist das T z. B. das Interface Comparable implementiert und somit die Methode compareTo zur verfügung stellt:
Wenn ich das ganze als eigene Klasse schreiben würde wäre es kein Problem oder als Anonyme Klasse doch als Lambda verstehe ich nicht wie das gehen soll 🙁
Hier einfach mal als eine eigene Klasse (inner class):
Vielleicht kann mir da einer weiter Helfen 🙂 vielleicht stoßen Lambdas hier ja auch an Ihre Grenzen was echt schade wäre denn ich dachte ja dafür wären sie da für Anonyme Klassen "Leichter" und "Verständlicher" zu schreiben 😀
LG
ich hänge gerade an den Lambdas in Verbindung mit Comparatoren :-D
Hab mir eine kleine Klasse Pair geschrieben die einfach ein Pärchen speichert.
Java:
public class Pairs<T,U> {
private T t;
private U u;
public Pairs() {
t = null;
u = null;
}
public Pairs(T t, U u) {
this.t=t;
this.u=u;
}
public T getT() {
return t;
}
public U getU() {
return u;
}
public String toString() {
return "("+t.toString()+" ,"+u.toString()+")";
}
}
Nun habe ich ein Pärchen erstellt mit String und Integer 🙂 und 2 Comparatoren mit Lambda geschrieben die nach T und nach U sortiert werden (also die Pärchen).
Java:
List<Pairs<String,Integer>> list = new ArrayList<>();
list.add(new Pairs<String,Integer>("I",1));
list.add(new Pairs<String,Integer>("V",5));
list.add(new Pairs<String,Integer>("C",100));
list.add(new Pairs<String,Integer>("II",2));
list.add(new Pairs<String,Integer>("IX",9));
Collections.sort(list, (o1,o2) -> o1.getT().compareTo(o2.getT()));
System.out.println(list);
Collections.sort(list, (o1,o2) -> o1.getU().compareTo(o2.getU()));
System.out.println(list);
Doch wenn ich einen eigenen Referenztyp nehme klappt das ganze nicht mehr da ich keine compareTo Methode mehr habe.
Deswegen möchte ich den Lambda - Ausdruck über die Wildcards so zum Beispiel einschränken damit Vorausgesetzt ist das T z. B. das Interface Comparable implementiert und somit die Methode compareTo zur verfügung stellt:
Java:
Comparator<T extends Comparable<? super T>,U>
Wenn ich das ganze als eigene Klasse schreiben würde wäre es kein Problem oder als Anonyme Klasse doch als Lambda verstehe ich nicht wie das gehen soll 🙁
Hier einfach mal als eine eigene Klasse (inner class):
Java:
// public static class FirstComparator<T extends Comparable<? super T>,U> implements Comparator<Pairs<T,U>> {
//
// @Override
// public int compare(Pairs<T,U> o1, Pairs<T,U> o2) {
// if(o1.getT() == null)
// return o2.getT() == null ? 0:-1;
// if(o2.getT() == null)
// return 1;
// return o1.getT().compareTo(o2.getT());
// }
//
// }
Vielleicht kann mir da einer weiter Helfen 🙂 vielleicht stoßen Lambdas hier ja auch an Ihre Grenzen was echt schade wäre denn ich dachte ja dafür wären sie da für Anonyme Klassen "Leichter" und "Verständlicher" zu schreiben 😀
LG