5 votes

Pourquoi n'y a-t-il pas de BiConsumer primitif en java 8 ?

Je suis nouveau dans Java 8 et je ne trouve pas de BiConsumer primitif (IntBiConsumer etc.). Cependant, il existe un ToIntBiFunction qui est la spécialisation primitive du BiFunction. Il existe également un IntBinaryOperator qui est identique à ToIntBiFunction.

BiConsumer<Integer,String> wrappedBiConsumer = (i,s) -> System.out.printf("Consume %d %s \n",i,s);
ToIntBiFunction<String,String> toIntFunction = (a,b) -> a.length()* b.length();
  1. Y a-t-il une raison pour laquelle Oracle n'a pas fourni un IntBiConsumer avec Java8 ?
  2. Pourquoi y a-t-il deux interfaces comme "IntBinaryOperator" et "ToIntBiFunction" au lieu d'une seule interface comme "IntBiFunction" ? (si elles sont là pour servir des objectifs différents, elles peuvent quand même être étendues à partir de la même IntBiFunction parent).

Je suis sûr qu'ils l'ont conçu de cette façon avec une bonne raison et s'il vous plaît laissez-moi la comprendre.

8voto

orionll Points 1045

En fait, il y a un ObjIntConsumer en Java qui est une int-spécialisation partielle de BiConsumer . Ainsi, votre premier exemple peut être réécrit comme suit :

ObjIntConsumer<String> consumer = (s, i) -> System.out.printf("Consume %d %s%n", i, s);

5voto

Jack Points 61503

Je ne vois pas de raison spécifique derrière cette exclusion. IntBiConsumer c'est un problème trivial @FunctionalInterface que vous pouvez facilement mettre en œuvre si vous en avez besoin. Je suppose que c'est la même raison pour laquelle nous n'avons pas TriFunction o TriConsumer interfaces.

Ne pas mélanger IntBinaryOperator con ToIntBiFunction . Le premier est une fonction de type (int, int) -> int tandis que la dernière est de la forme (T, U) -> int . Donc, ce dernier pourrait tout au plus être (Integer, Integer) -> int mais cela implique de mettre en boîte des primitives à l'intérieur d'objets, ce qui est loin d'être performant. IntBinaryOperator Au lieu de cela, il les conserve sans les intégrer, ce qui est utile lorsque vous avez besoin de plus de performances (et cela peut être le cas avec une fonction int binaire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X