Funkcionálne programovanie Cvičenie 9 Funkcionálne programovanie v Jave Sergej Chodarev 22. november 2017 Technická Univerzita v Košiciach

Podobné dokumenty
PowerPoint Presentation

enum

Objektovo orientované programovanie

Identity Lifecycle Management

midterm2014_1

DediĊnosť

História

Princípy tvorby softvéru Programovacie paradigmy

PowerPoint Presentation

Identity Lifecycle Management

Algoritmizácia a programovanie - Príkazy

midterm2019

Identity Lifecycle Management

User:Andrej Sedlacek

Konkurentné programovanie

Prezentácia programu PowerPoint

Výnimky

Úvod do mobilného operačného systému ANDROID

PowerPoint Presentation

Matej Kendera - PDF, word, lucene, java

PowerPoint Presentation

Konkurentné programovanie

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

ECDL Syllabus V50 SK-V01

Identity Lifecycle Management

Súkromné gymnázium, Česká 10, Bratislava INFORMATIKA

Katalóg cieľových požiadaviek k maturitnej skúške

Intellectual Property, Psychology and Sociology

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

PowerPoint Presentation

Praktické paralelné programovanie v jazykoch C# 4.0 a C++

Neineárne programovanie zimný semester 2018/19 M. Trnovská, KAMŠ, FMFI UK 1

PowerPoint Presentation

Cvičenie 9 Riešené príklady 1. Príklad min f(x 1, x 2 ) = x x x 1 s.t. x 1 80 x 1 + x Pre riešenie úlohy vykonáme nasledujúce kroky

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

Architektúra a návrh Zdôvodnenie navrhnutej architektúry Systém si architektonicky môžeme rozdeliť na viacero vrstiev. Najpodstatnejšie je oddelenie z

Snímka 1

Microsoft PowerPoint - OOP_prednaska_10.pptx

Vnútorná reprezentácia údajových typov

Úvodná prednáška z RaL

Hospodarska_informatika_2015_2016a

Technická dokumentácia Logger modulu Verzia Tabuľka 1. Autori Autor Tomáš Donko Rola

MO_pred1

Snímka 1

Microsoft PowerPoint - Prog_p08.ppt

Groovy

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Dátové rozhranie pre externý subjekt FR SR Strana 1 z 11 Dátové rozhranie

Kniha 6.indb

Relačné a logické bázy dát

Microsoft Word - HANDZAK.DOC

CviĊenie z PTS

NÁVRH UČEBNÝCH OSNOV PRE 1

7/1/2015 Úvod do databáz, skúškový test, max 25 bodov, 90 min

PROCES ŠTRUKTÚROVANIA PROBLÉMU AKO SÚČASŤ FÁZY IDENTIFIKÁCIE PROBLÉMU V PROCESE TVORBY VEREJNEJ POLITIKY PROBLEM STRUCTURING PROCESS AS A PART OF THE

Distance search Ján Garaj Fakulta informatiky a informačných technológií Slovenská technická univerzita Školský rok: 2008/09 Popis problému a motiváci

Národný informačný systém podpory výskumu a vývoja v SR prístup k elektronickým informačným zdrojom N I S P E Z /nispez.cvtisr.sk/ Dotazník využívanie

Chemical Business NewsBase

Prezentace aplikace PowerPoint

PowerPoint Presentation

Slovenská technická univerzita v Bratislave FAKULTA INFORMATIKY A INFORMAČNÝCH TECHNOLÓGIÍ Ilkovičova 3, Bratislava Tímový projekt Ponuka Grafi

Medzinárodné financie Prednáška

Používateľská príručka POUŽÍVATEĽSKÁ PRÍRUČKA Generátor XML dávok pre Informačný systém kontrolných známok z MS Excel šablóny Dátum: Verzia

Slovenská technická univerzita v Bratislave

4-david-msipapersource10.doc

Cisco Multicast VLAN Registration (MVR) pro efektivní distribuci skupinového provozu na kruhové topologii Bc. Jozef Záhon (ZAH0022), Bc. Martin Chrenš

Vyhodnotenie dotazníkovej ankety vyučujúcich (učitelia + doktorandi) Obdobie dotazovania: 23. november január 2018 Odpovedalo 210 respondento

MS SNV-výzva-zborník-2014

Microsoft Word - 11_Distribuované spracovanie dát nad MapReduce architektúrou _Hadoop a Hive_

Snímka 1

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE Fakulta informatiky a informačných technológií STU Ústav počítačových systémov a sietí ZADANIE SEMESTRÁLNE

Slide 1

Matematika 2 - cast: Funkcia viac premenných

RE Windows

Vietnam – Kambodža 2017

UNIVERZITA PAVLA JOZEFA ŠAFÁRIKA V KOŠICIACH VZDELÁVACÍ PROGRAM Aktivačné metódy pre prácu s talentovanou mládežou v predmete informatika Aktualizačné

Informačná a modelová podpora pre kvantifikáciu prvkov daňovej sústavy SR

Snímka 1

--1/7-- ZŠ Scratch III 10/20 UK M. Tomcsányiová verzia HRA NIM 13 Oblasť informatiky / Téma Algoritmické riešenie problémov / Hra NIM 13 I

NSK Karta PDF

Modelovanie nového produktu na trhu: Bassov model Beáta Stehlíková Cvičenia z časových radov, FMFI UK Modelovanie nového produktu na trhu: Bassov mode

Univerzita veterinárskeho lekárstva a farmácie v Košiciach Vnútorný systém kvality na Univerzite veterinárskeho lekárstva a farmácie v Košiciach Vnúto

03_ControlFlow.dvi

Microsoft Word - Kocian - esej2011_13-is-xkocianr.doc

Cielená príprava žiakov s ťažkým zrakovým postihnutím na ďalšie štúdium

Prezentace aplikace PowerPoint

Testy z CSS_2015_16

ČASOVÝ HARMONOGRAM LABORATÓRNYCH CVIČENÍ Z PREDMETU ELEKTRICKÉ STROJE STRIEDAVÉ

Škola (názov, adresa)

PDS01

JUDr

Škola (názov, adresa)

Platný od: OPIS ŠTUDIJNÉHO ODBORU INFORMATIKA

Priklad 9 - LisovanieVyluhovanieSusenie.xls

Funkcie viac premenných

Predmet didaktiky informatiky. Ciele a obsah školskej informatiky, osnovy, štandardy, maturita, učebnice ...

Slovenská technická univerzita v Bratislave FAKULTA INFORMATIKY A INFORMAČNÝCH TECHNOLÓGIÍ Ilkovičova 3, Bratislava Tímový projekt Grafická pod

Prepis:

Funkcionálne programovanie Cvičenie 9 Funkcionálne programovanie v Jave Sergej Chodarev 22. november 2017 Technická Univerzita v Košiciach

Funkcie vyššieho rádu Ako v Jave implementovať funkciu, ktorá manipuluje funkciami? 1

Funkcie vyššieho rádu Ako v Jave implementovať funkciu, ktorá manipuluje funkciami? Použiť namiesto funkcie objekt s jednou metódou. 1

Funkcie vyššieho rádu Ako v Jave implementovať funkciu, ktorá manipuluje funkciami? Použiť namiesto funkcie objekt s jednou metódou. Príklad class LengthComparator implements Comparator<String> { public int compare(string x, String y) { return Integer.compare(x.length(), y.length()); } } Arrays.sort(strings, new LengthComparator()); 1

Anonymne funkcie Výraz lambda (x, y) -> x + y Príklad Arrays.sort(strings, (x, y) -> Integer.compare(x.length(), y.length())); 2

Anonymne funkcie Výraz lambda (x, y) -> x + y Príklad Arrays.sort(strings, (x, y) -> Integer.compare(x.length(), y.length())); Arrays.sort(strings, new Comparator<String>() { public int compare(string x, String y) { return Integer.compare(x.length(), y.length()); } }); 2

Funkcionálne rozhrania / Functional interfaces Funkcionálne rozhranie rozhranie, ktoré má práve jednu abstraktnú metódu. Príklad Comparator<String> bylength = (x, y) -> Integer.compare(x.length(), y.length()); 3

Funkcionálne rozhrania / Functional interfaces Funkcionálne rozhranie rozhranie, ktoré má práve jednu abstraktnú metódu. Príklad Comparator<String> bylength = (x, y) -> Integer.compare(x.length(), y.length()); Štandardné funkcionálne rozhrania java.util.function 3

Referencie na metódy Arrays.sort(strings, (x, y) -> x.comparetoignorecase(y)); 4

Referencie na metódy Arrays.sort(strings, (x, y) -> x.comparetoignorecase(y)); Arrays.sort(strings, String::compareToIgnoreCase); 4

Voľne premenné public static void repeatmessage(string text, int count) { Runnable r = () -> { for (int i = 0; i < count; i++) { System.out.println(text); Thread.yield(); } }; new Thread(r).start(); } Zachytenie voľných premenných uzáver (closure) 5

Prúdy Prúd (Stream) Štruktúra reprezentujúca postupnosť operácií nad kolekciou. Balík java.util.stream 6

Prúdy Prúd (Stream) Štruktúra reprezentujúca postupnosť operácií nad kolekciou. Balík java.util.stream Príklad List<Entry> topnosql = entries.stream().filter(a -> a.gettags().contains("nosql")).sorted(comparator.comparing(entry::getwords).reversed()).limit(3).collect(collectors.tolist()); 6

Primitívne prúdy int wordcount = entries.stream().filter(a -> a.gettags().contains("nosql")).map(entry::getwords).reduce(integer::sum).orelse(0); 7

Primitívne prúdy int wordcount = entries.stream().filter(a -> a.gettags().contains("nosql")).map(entry::getwords).reduce(integer::sum).orelse(0); int wordcount = entries.stream().filter(a -> a.gettags().contains("nosql")).maptoint(entry::getwords).sum(); 7

Paralelné prúdy int wordcount = entries.parallelstream().filter(a -> a.gettags().contains("nosql")).maptoint(entry::getwords).sum(); 8

Vyhodnocovanie na základe požiadavky take 25 (map (^2) [1..]) 9

Vyhodnocovanie na základe požiadavky take 25 (map (^2) [1..]) IntStream.iterate(1, i -> i+1).map(i -> i*i).limit(25).toarray() 9

Vyhodnocovanie na základe požiadavky take 25 (map (^2) [1..]) IntStream.iterate(1, i -> i+1).map(i -> i*i).limit(25).toarray() boolean haslongnosql = entries.stream().filter(a -> a.gettags().contains("nosql")).map(entry::getwords).anymatch(w -> w > 1000); 9

Literatúra Cay S. Horstmann: Lambda Expressions in Java 8 (Dr. Dobb s Journal) Benjamin Winterberg: Java 8 Stream Tutorial Brian Goetz: Lambdas and Streams in Java 8 Libraries (Dr. Dobb s Journal) Edwin Dalorzo: Functional Programming with Java 8 Functions (DZone Java) Aboullaite Mohammed: Java 9 enhancements to Optional/Stream 10