Je veux résumer une liste d'entiers. Cela fonctionne comme suit, mais la syntaxe ne semble pas correcte. Le code pourrait-il être optimisé?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
très clair, personnellement. Bon, oui il faut savoir que la valeur sera automatiquement déballée, mais c'est vrai depuis Java 5 ...
foo(int i)
n'écrivent pas à foo(myInteger.intValue());
chaque fois qu'ils l'appellent (ou du moins je m'attends à ce que non !!). Je suis d'accord avec vous, c'est Integer::intValue
plus explicite, mais je pense que la même chose s'applique ici. Les gens devraient juste l'apprendre une fois et vous avez terminé :-). Ce n'est pas comme si c'était de l'obscurcissement magique.
i -> i
ressemble à un no-op et conceptuellement, il est un non-op. Bien sûr, sous le capot Integer.intValue()
est appelé, mais encore plus profondément sous le capot, ces méthodes sont intégrées pour devenir exactement le no-op auquel elles ressemblent dans le code source. Integer::intValue
a l'avantage de ne pas créer de méthode synthétique dans le code octet, mais ce n'est pas ce qui devrait motiver votre décision sur la façon d'organiser votre code source.
mapToLong
pour éviter les débordements, selon les valeurs que votre carte peut avoir.