Nous avons résumé l'interface fonctionnelle de Java SE 8 et la spécialisation primitive de Stream. Le but est de se préparer à l'examen Java Gold.
En java, les primitives ne peuvent pas être données aux arguments de type tels que T, R de R s'appliquent (T t) de Function \ <T, R>. Dans l'interface fonctionnelle et Stream, certaines classes sont définies individuellement afin que int, long et double puissent être exploités comme des génériques (sans encadrer la classe wrapper). C'est ce qu'on appelle un type avec une spécialisation primitive. Si vous ne vous souvenez que de int, il n'y a aucune différence entre long et double.
Nom de classe de base | Spécialisation à int | Spécialisation à long | Spécialisation pour doubler | Nom de la méthode de base |
---|---|---|---|---|
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() |
Les interfaces fonctionnelles spécialisées dans les primitives apparaissent comme des arguments des méthodes Stream spécialisées dans les primitives.
e.g.
[IntStream.filter ()] Prenez IntPredicate comme argument de 3.
Le nom de méthode de l'interface fonctionnelle doit être ** "nom de méthode de base comme nom de type" ** uniquement si la valeur de retour est une primitive.
e.g.
--R apply (T t) → Renvoie la valeur à int → int applyAsInt (T t)
--T get () → Renvoie la valeur à double → double getAsDouble ()
La cible de la spécialisation est essentiellement uniquement int, long, double et BooleanSupplier est spécial. ――BooleanSupplier est-il censé être utilisé lors de l'écriture de tests et d'assertions?
"Mauvais flotteur, ce forfait est pour 3 personnes"
La spécialisation primitive de fonction correspond à chacun des modèles suivants.
Prenez l'argument de la primitive et renvoyez la primitive
Prenez un argument d'objet et renvoyez une primitive
Prenez un argument primitif et renvoyez un objet
Y a-t-il un IntToIntFunction dans les deuxième et troisième lignes du tableau? Il semble que ce sera IntUnaryOperator.
--Dans accept () de ObjIntConsumer correspondant à BiConsumer, l'argument 1 est un objet et l'argument 2 est un int. Ceci est utilisé comme accumulateur pour [IntStream.collect ()] 2.
Les 3 classes suivantes sont des types spécialisés primitifs de Stream \
Ici, nous l'appellerons un flux spécialisé primitif.
--sum (): prenez la somme.
--avage (): prend la moyenne arithmétique. La valeur de retour est facultative Double.
--max (): Puisque la commande est explicite, elle ne prend pas d'argument contrairement à Stream \
this | Valeur de retour | Nom de la méthode | argument |
---|---|---|---|
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 | Valeur de retour | Nom de la méthode | argument |
---|---|---|---|
IntStream | DoubleStream | asDoubleStream | - |
IntStream | LongStream | asLongStream | - |
LongStream | DoubleStream | asDoubleStream | - |
this | Valeur de retour | Nom de la méthode | argument |
---|---|---|---|
IntStream | Stream<Integer> | boxed | - |
LongStream | Stream<Long> | boxed | - |
DoubleStream | Stream<Double> | boxed | - |
this | Valeur de retour | Nom de la méthode | argument |
---|---|---|---|
Stream<T> | IntStream() | mapToInt | ToIntFunction<? super T> |
Stream<T> | LongStream() | mapToLong | ToLongFunction<? super T> |
Stream<T> | DoubleStream() | mapToDouble | ToDoubleFunction<? super T> |
Une combinaison d'aplatissement et de spécialisation primitive. ** Celui qui semble être à l'examen **.
this | Valeur de retour | Nom de la méthode | argument |
---|---|---|---|
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