Wir haben die funktionale Schnittstelle von Java SE 8 und die primitive Spezialisierung von Stream zusammengefasst. Der Zweck ist die Vorbereitung auf die Java Gold-Prüfung.
In Java können keine Grundelemente angegeben werden, um Argumente wie T, R von R (T t) der Funktion \ <T, R> anzuwenden. In der Funktionsschnittstelle und im Stream werden einige Klassen einzeln definiert, sodass int, long und double wie Generika betrieben werden können (ohne die Wrapper-Klasse einzuschränken). Dies wird als Typ mit primitiver Spezialisierung bezeichnet. Wenn Sie sich nur an int erinnern, gibt es keinen Unterschied zwischen long und double.
Grundklassenname | Spezialisierung auf int | Spezialisierung zu lang | Spezialisierung zu verdoppeln | Grundlegender Methodenname |
---|---|---|---|---|
Function<T,R> | IntFunction<R> | LongFunction<R> | DoubleFunction<R> | apply() |
Function<T,R> | IntToDoubleFunction | LongToDoubleFunction | DoubleToIntFunction | apply() |
Function<T,R> | IntToLongFunction | LongToIntFunction | DoubleToLongFunction | apply() |
Function<T,R> | ToIntFunction<T> | ToLongFunction<T> | ToDoubleFunction<T> | apply() |
UnaryOperator<T> | IntUnaryOperator | LongUnaryOperator | DoubleUnaryOperator | apply() |
BiFunction<T,U,R> | ToIntBiFunction<T,U> | ToLongBiFunction<T,U> | ToDoubleBiFunction<T,U> | apply() |
BinaryOperator<T> | IntBinaryOperator | LongBinaryOperator | DoubleBinaryOperator | apply() |
Predicate<T> | IntPredicate | LongPredicate | DoublePredicate | test() |
BiPredicate<T,U> | - | - | - | test() |
Consumer<T> | IntConsumer | LongConsumer | DoubleConsumer | accept() |
BiConsumer<T,U> | ObjIntConsumer<T> | ObjLongConsumer<T> | ObjDoubleConsumer<T> | accept() |
Supplier<T> | IntSupplier | LongSupplier | DoubleSupplier | get() |
BooleanSupplier | - | - | - | getAsBoolean() |
Primitiv-spezialisierte Funktionsschnittstellen erscheinen als Argumente für die primitiv-spezialisierten Stream-Methoden.
e.g.
[IntStream.filter ()] Nehmen Sie IntPredicate als Argument von 3.
Der Methodenname der Funktionsschnittstelle sollte nur dann ** "grundlegender Methodenname als Typname" ** sein, wenn der Rückgabewert ein Grundelement ist.
e.g.
--R apply (T t) → Rückgabewert auf int → int applyAsInt (T t)
--T get () → Rückgabewert auf double → double getAsDouble ()
Das Ziel der Spezialisierung ist im Grunde nur int, long, double und BooleanSupplier ist speziell. --BooleanSupplier soll wahrscheinlich beim Schreiben von Tests und Zusicherungen verwendet werden.
"Bad Float, dieses Paket ist für 3 Personen"
--Funktionsprimitivspezialisierung entspricht jedem der folgenden Muster.
Nehmen Sie das Argument des Grundelements und geben Sie das Grundelement zurück
Nehmen Sie ein Objektargument und geben Sie ein Grundelement zurück
Nehmen Sie ein primitives Argument und geben Sie ein Objekt zurück
Gibt es eine IntToIntFunction in der zweiten und dritten Zeile der Tabelle? Es sieht so aus, als wäre es IntUnaryOperator.
In accept () von ObjIntConsumer, das BiConsumer entspricht, ist Argument 1 ein Objekt und Argument 2 ist int. Dies wird als Akkumulator für [IntStream.collect ()] 2 verwendet.
Die folgenden 3 Klassen sind primitive Spezialtypen aus Stream \
Hier nennen wir es einen primitiven spezialisierten Stream.
--sum (): Nimm die Summe.
--avage (): Nimm den arithmetischen Durchschnitt. Der Rückgabewert ist Optional Double.
--max (): Da die Reihenfolge selbsterklärend ist, wird im Gegensatz zu Stream \
this | Rückgabewert | Methodenname | Streit |
---|---|---|---|
IntStream | LongStream | mapToLong *1 | IntToLongFunction |
IntStream | DoubleStream | mapToDouble *1 | IntToDoubleFunction |
IntStream | Stream<T> | mapToObj *2 | IntFunction<? extends T> |
LongStream | IntStream | mapToInt | LongToIntFunction |
LongStream | DoubleStream | mapToDouble *1 | LongToDoubleFunction |
LongStream | Stream<T> | mapToObj *2 | LongFunction<? extends T> |
DoubleStream | IntStream | mapToInt | DoubleToIntFunction |
DoubleStream | LongStream | mapToLong | DoubleToLongFunction |
DoubleStream | Stream<T> | mapToObj *2 | DoubleFunction<? extends T> |
this | Rückgabewert | Methodenname | Streit |
---|---|---|---|
IntStream | DoubleStream | asDoubleStream | - |
IntStream | LongStream | asLongStream | - |
LongStream | DoubleStream | asDoubleStream | - |
this | Rückgabewert | Methodenname | Streit |
---|---|---|---|
IntStream | Stream<Integer> | boxed | - |
LongStream | Stream<Long> | boxed | - |
DoubleStream | Stream<Double> | boxed | - |
this | Rückgabewert | Methodenname | Streit |
---|---|---|---|
Stream<T> | IntStream() | mapToInt | ToIntFunction<? super T> |
Stream<T> | LongStream() | mapToLong | ToLongFunction<? super T> |
Stream<T> | DoubleStream() | mapToDouble | ToDoubleFunction<? super T> |
Eine Kombination aus Abflachung und primitiver Spezialisierung. ** Derjenige, der an der Prüfung teilzunehmen scheint **.
this | Rückgabewert | Methodenname | Streit |
---|---|---|---|
Stream<T> | IntStream() | flatMapToInt | Function<? super T,? extends IntStream> |
Stream<T> | LongStream() | flatMapToLong | Function<? super T,? extends LongStream> |
Stream<T> | DoubleStream() | flatMapToDouble | Function<? super T,? extends DoubleStream> |
Recommended Posts