Vous faites toujours une somme positive +=
sur l'opérateur -
. Mais qu'en est-il de l'utilisation du Stream
-API à la place?
IntStream.of(1, 2, 3, 4, 5)
.reduce(operatorFunction('-'))
.ifPresent(System.out::println);
avec la fonction IntBinaryOperator
-retour suivante:
static IntBinaryOperator operatorFunction(char operator) {
if (operator == '-') {
return (int1, int2) -> int1 - int2;
}
return (int1, int2) -> int1 + int2;
}
qui imprime -13
que vous attendez. C'est tout ce dont vous avez besoin. Notez que vous pouvez également utiliser IntStream.sum
pour obtenir une somme simple. Avec le operatorFunction
cependant, vous pouvez également ajouter *
ou ÷
plus tard si vous le souhaitez.
Une autre façon d'écrire le code ci-dessus (avec des valeurs intermédiaires):
int[] yourInputArray = {1, 2, 3, 4, 5};
char operator = '-';
OptionalInt = Stream.of(yourInputArray)
.reduce(operatorFunction(operator));
De là, vous pouvez appeler orElse(0)
ou jeter une exception avec orElseThrow(() -> ...)
, etc. Il suffit de jeter un oeil à la OptionalInt
-javadoc pour vos options. Dès que vous vous éloignez de la primitive int
, vous pouvez échanger le code en utilisant Stream
, BinaryOperator<Integer>
et Optional<Integer>
. Par ailleurs, il existe également un code IndexOutOfBoundException
dans votre code actuel. Mais pourquoi jouer avec des index et des tableaux, si vous pouvez utiliser Stream
s et si peu de lignes de code?
Avez-vous essayé d'utiliser "- =" au lieu de "+ ="? –
Votre exemple donne un traitement spécial au premier élément. Est-ce correct? Vouliez-vous dire 1-2-3-4-5? Ou voulez-vous dire -1-2-3-4-5 (en commençant par le premier élément vs en commençant par 0)? – Arkadiy