Chcę podsumować listę liczb całkowitych. Działa w następujący sposób, ale składnia nie wydaje się właściwa. Czy można zoptymalizować kod?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
bardzo jasne. Cóż, tak, musisz wiedzieć, że wartość zostanie automatycznie rozpakowana, ale jest to prawdą, ponieważ Java 5 ...
foo(int i)
, nie piszą za foo(myInteger.intValue());
każdym razem, gdy ją wywołują (a przynajmniej nie oczekuję !!). Zgadzam się z tobą, co Integer::intValue
jest bardziej wyraźne, ale myślę, że to samo dotyczy tutaj. Ludzie powinni się tego nauczyć raz, a potem skończysz :-). To nie jest tak, jakby to było jakieś magiczne zaciemnienie.
i -> i
wygląda na to , że nie ma op, a koncepcyjnie jest to brak op. Jasne, pod maską Integer.intValue()
zostaje wywołane, ale jeszcze głębiej pod maską, że metody są wprowadzane, aby stać się dokładnie tym, czego nie ma w kodzie źródłowym. Integer::intValue
ma tę zaletę, że nie tworzy syntetycznej metody w kodzie bajtów, ale nie jest to tym, co powinno decydować o sposobie organizacji kodu źródłowego.
mapToLong
aby uniknąć przepełnienia, w zależności od wartości, jakie może mieć mapa.