===== 10 - Java mapreduce kungfu ===== ==== Možné řešení z minulého cvičení ==== [[https://gitlab.fel.cvut.cz/B211_B6B36OMO/seminar/-/tree/master/cv9_solution|]] ===== Teorie ===== /* Pro ty, kteří byli na přednáškách: [[https://zeroturnaround.com/rebellabs/java-8-streams-cheat-sheet/attachment/java-8-streams-cheat-sheet-v3/|Java mapreduce cheat sheet]] */ Pro ty, kteří nebyli na přednáškách: - přednáška a (nebo) [[http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html| Java 8 streams na Oracle]] ===== Zadání ===== Stáhněte si z repository základ cvičení 10: https://gitlab.fel.cvut.cz/B231_B6B36OMO/seminar/-/tree/master/cv10_assignment Cvičení má dvě části: ===== Část I: - Základ a mírně pokročilé ===== Struktura: * //Trader.java// - entita pro reprezentaci obchodníka s akciemi * //Transaction.java// - entita pro reprezentaci transakcí * //TraderHistory.java// - komponenta, do které budete implementovat mapreduce funkce * //TradeHistoryTest.java// - testovací třída pro ověření vaší implementace, projděte si jí před začátkem implementace **1. findAllTransactionsIn2011AndSortByValueAsc()** Nalezněte všechny transakce provedené v roce 2011 a setřiďte je podle velikost. Hint: operace //filter(), sorted()// a //collect()// **2. getUniqueCitiesSortedAsc()** Vypište unikátní seznam měst. **3. getSingleStringFromUniqueTradersNamesSortByNameAsc()** Vypište řetězec, který vypisuje seznam obchodníků ve formátu "Traders: name1 name2 ... "- např. "Traders: Bob George", ''. Hint: použijte //reduce()// operaci **4. isSomeTraderFromCity()** Existuje pro zadané město nějaký obchodník? Hint. operace //anyMatch()// **5. findSmallestTransactionUsingReduce()** Nalezněte nejmenší transakci. Pro nalezní použijte //reduce()// operaci **6. getTradersByTown()** Vraťte obchodníky zgrupovné podle města. Hint. operace //groupingBy()// **7. getTradersCountsByTown()** Vraťte počty obchodníků zgrupovné podle města. **8. partitionTransactionsByTraderIsVegetarian()** Rozdělte transakce na dvě skupiny - první, provedené vegetariány a druhá ostatní. Hint. operace //partitionBy()// ===== Část II - Pokročilé ===== Struktura: * //MathIsCool.java// - třída, do které budete implementovat mapreduce funkce * //MathIsCoolTest.java// - testovací třída pro ověření vaší implementace, projděte si jí před začátkem implementace **1. Fibonaciho posloupnost** Vygenerujte sekvenci <{0, 1},{1, 1},{1, 2},{2, 3},{3, 5},{5, 8}...>. Hint. použijte indukci (//iterate()//) {{:courses:a7b36omo:labs:fibo3.jpg|}} {{:courses:a7b36omo:labs:fibon4.jpg?200|}} **2. Pythagorovy trojice** Vygenerujte pythagorovy trojice <{3.0, 4.0, 5.0}, {5.0, 12.0, 13.0}, {6.0, 8.0, 10.0}... >. Hint. //IntStream.rangeClosed(0, 1000) .boxed()// vrací stream Iteger hodnot 0 až 1000. {{:courses:a7b36omo:labs:pytha1.jpeg?|}} ===== Design workshop ===== V [[https://docs.google.com/presentation/d/1gDPISK1mG-WIV5EL0lEvA3tNuOcxULohFwd-38Nr79c/edit?usp=sharing|prezentaci]] naleznete rozsáhlejší příklad.