W zeszłym tygodniu opisałem przypadek użycia niestandardowego Stream Collector. Otrzymałem intrygujący komentarz na Twitterze:
Czapki z głów, Miguel! Twój komentarz ujawnił metodę, której nie znałem!
Postanowiłem więc zbadać, na czym polega ta teeing()metoda.
Zwraca Collector, który jest złożeniem dwóch kolektorów podrzędnych. Każdy element przekazany do powstałego kolektora jest przetwarzany przez oba kolektory niższego rzędu, a następnie ich wyniki są scalane przy użyciu określonej funkcji scalania w końcowy wynik.
Wynikowe funkcje kolektora wykonują następujące czynności:
* dostawca: tworzy pojemnik z wynikami, który zawiera pojemniki z wynikami uzyskane przez wywołanie dostawcy każdego kolektora
* akumulator: wywołuje każdy akumulator kolektora z jego pojemnikiem wynikowym i elementem wejściowym
* sumator: wywołuje sumator każdego kolektora z dwoma kontenerami wyników
* finisher: wywołuje finisher każdego kolektora z jego kontenerem wyników, a następnie wywołuje dostarczone połączenie i zwraca wynik.
— JavaDocs
Możemy rzeczywiście zastąpić nasz zwyczaj Collectordwiema prostymi Collectorimplementacjami, jedną agregującą wiersze cen, a drugą sumującą cenę koszyka.
Przyjrzyjmy się końcowemu kodowi i wyjaśnijmy go linijka po linijce.
public PriceAndRows getPriceAndRows(Cart cart) {
return cart.getProducts()
.entrySet()
.stream()
.map(CartRow::new) // 1
.collect(Collectors.teeing( // 2
Collectors.reducing( // 3
BigDecimal.ZERO, // 4
CartRow::getRowPrice, // 5
BigDecimal::add), // 6
Collectors.toList(), // 7
PriceAndRows::new // 8
));
}
teeing()metodęreducing()połączenie z:Pricez aCartRowBinaryOperatordodać dwie ceny razemCartRoww listęCollector, tj , supplier(), `accumulator()icombiner()finisher()Collector, przekazując paryMam nadzieję, że ten post skłonił Cię do rozważenia użycia teeing() przed utworzeniem niestandardowego Collector. Jeszcze raz dziękuję Miguelowi!
Swoją drogą zawsze chętnie uczę się nowych rzeczy. Jeśli chcesz podzielić się spostrzeżeniami, możesz skorzystać z poniższego systemu komentowania lub Twittera.
Pełny kod źródłowy tego posta można znaleźć na Github w formacie Maven.
Wprowadzenie Apache Kafka to rozproszona platforma przesyłania strumieniowego typu open source, która obsługuje przesyłanie strumieniowe danych w czasie rzeczywistym na dużą skalę, o dużej przepustowości i odporności na błędy. System opiera się na modelu publikowania-subskrybowania, w którym producenci publikują wiadomości w tematach, a konsumenci subskrybują te tematy, aby konsumować wiadomości.
Rozwój mobilny stał się kluczowym elementem sukcesu firm w dzisiejszym cyfrowym świecie. Jako programista aplikacji mobilnych bardzo ważne jest, aby wybrać odpowiedni język programowania do tworzenia aplikacji.
Jest wspaniale złoty poranek na falistych wzgórzach zachodu, gdy pierwsze promienie słońca oświetlają oszronioną trawę na równinach. Stado spokojnego bydła rasy Angus, czarnego jak smoła i masywne, rysuje się na tle wschodu słońca, gdy zmierza utartym szlakiem do miejsca, które wszyscy dobrze znają; bar śniadaniowy.
Ile razy bez zastanowienia wyrzuciłeś plastikową butelkę, szklany słoik, aluminiową puszkę lub pakiet zielonej energii? Ile razy chciałeś dostać coś w zamian za ich recykling? Jeśli jesteś jak większość ludzi, odpowiedź brzmi prawdopodobnie wiele razy. Recykling jest często postrzegany jako kłopot, przykry obowiązek lub obowiązek, który nie przynosi żadnych natychmiastowych ani wymiernych korzyści.
W dzisiejszym dynamicznym i konkurencyjnym świecie kariera odgrywa znaczącą rolę w rozwoju osobistym, stabilności finansowej i ogólnej satysfakcji z życia. Jednak wiele osób wpada w nieustający cykl stagnacji i niezadowolenia, stopniowo marnując swoje życie zawodowe.
Wczoraj zamknęliśmy drzwi tegorocznego Konkursu Piosenki Eurowizji błyskotliwym, chaotycznym wielkim finałem, w którym szwedzka piosenkarka Loreen zabrała do domu trofeum, stając się pierwszą kobietą, która wygrała dwa razy i przywracając koronę Szwecji 50 lat po tym, jak ABBA wygrała konkurs z „Waterloo”. Stali się jednym z największych zespołów w kanonie muzyki pop.