Wenn mit Transformationen zu tun (zB: Transformation List<People> people
-List<Integer> ages
, wo People
eine Klasse, die eine Eigenschaft age
enthält), in der Regel gibt es 2 Möglichkeiten (für mich), dies zu tun:kann ich java8 (stream, lambda) und guava kombinieren?
Verwendung java8:
people.stream().map(p -> p.getAge()).collect(toList())
;oder Benutzer guava2:
Lists2.transform(people, People2AgeTransformer.INSTANCE);
wo diePeople2AgeTransformer
ist ein Transformator, der die Funktion Schnittstelle implementiert das Alter zurückzukehren.
Vor kurzem fand ich accidentlly dass java8 und Guave und der Code kann daher kombiniert werden:
Lists2.transform(people, p->p.getAge());
dieses Stück Code entspricht und läuft OK ohne Fehler, was mich verwirrt. Das Verfahren Lists2.transform()
erfordert die zweite args die Umsetzung der Schnittstelle com.google.common.base.Function
zu sein, während das java8 Lambda java.util.function.Function
tatsächlich die Umsetzung der Schnittstelle ist. (Na ja, sie beide erklären, ein Verfahren B apply(A input)
A nach B zu transformieren)
I don verstehe nicht, warum das funktionieren würde, da sie zwei unterschiedliche Schnittstellen verschiedener Pakete sind.
Vielen Dank! Ich denke, ich muss in die java8-Dokumente schauen. – LaiyuXuan