Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci



Podobné dokumenty
Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Abstraktní datové typy: zásobník

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Návrh softwarových systém. Návrh softwarových systémů

Principy objektově orientovaného programování

Úvod do programování v jazyce Java

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Generické programování

Jazyk C# (seminář 6)

typová konverze typová inference

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C# (seminář 5)

Úvod do programovacích jazyků (Java)

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Iterator & for cyklus

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

UJO Framework. revoluční architektura beans. verze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Seminář Java IV p.1/38

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Java Enum Java, zimní semestr ,2017 1

Paradigmata programování 1

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Projekty pro výuku programování v jazyce Java

PŘETĚŽOVÁNÍ OPERÁTORŮ

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Programování v Javě I. Leden 2008

Algoritmizace a programování

PREPROCESOR POKRAČOVÁNÍ

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Úvod do programovacích jazyků (Java)

Úvod do programování - Java. Cvičení č.4

Java a XML. 10/26/09 1/7 Java a XML

Úvod do programování v jazyce Java

KTE / ZPE Informační technologie

IRAE 07/08 Přednáška č. 7. Začátek (head)

8 Třídy, objekty, metody, předávání argumentů metod

1. Téma 12 - Textové soubory a výjimky

7. Dynamické datové struktury

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v Javě I. Únor 2009

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

boolean hasnext() Object next() void remove() Kolekce

1. Programování proti rozhraní

Typický prvek kolekce pro české řazení

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Algoritmizace a programování

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

9. přednáška - třídy, objekty

Datové struktury. alg12 1

Teoretické minimum z PJV

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

IRAE 07/08 Přednáška č. 1

Základy objektové orientace I. Únor 2010

Paradigmata programování II Korutiny a nedeterminismus

Lambda-výrazy a metody implementované v interfejsu

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Seminář Java II p.1/43

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

OOPR_05. Případové studie

5 Rekurze a zásobník. Rekurzivní volání metody

Paradigmata programování II Přednáška 1: Vedlejší efekt

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Abstraktní třída a rozhraní

20. Projekt Domácí mediotéka

PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Jazyk C# (seminář 3)

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Základy programovaní 3 (Java)

Možnosti deklarativního programování v jazyce Java 8

Jazyk C# a platforma.net

JAVA. java.lang.stringbuffer java.lang.stringbuilder

URČITÝM ZPŮSOBEM PODOBNÉ

10 Balíčky, grafické znázornění tříd, základy zapozdření

Paradigmata programování 2

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Pokročilé programování na platformě Java. Úvod

Regulární výrazy. Vzory

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Transkript:

Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10

Stream API Java 8 nový přístup k práci s kolekcemi nejsou to kolekce jako takové (pouze obalují data) kořeny ve funkcionálním programování ĺıné vyhodnocování podpora implicitně paralelního zpracování svým způsobem DSL (postavený na konceptu fluent interface) Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 2 / 10

Lambda výrazy Lambdas are relegated to relative obscurity until Java makes them popular by not having them. -- James Iry, A Brief, Incomplete, and Mostly Wrong History of Programming Languages funkcionální rozhraní = rozhraní deklarující jednu abstraktní metodu public interface Procedure { public void invoke(object arg); Procedure p = new Procedure() { public void invoke(object arg) { System.out.println("hello " + arg); ; Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 3 / 10

Lambda výrazy z pohledu programátora jsou lambda výrazy syntaktický cukr (argumenty) -> vyraz (Typ1 arg1, Typ2 arg2,...) -> vyraz Procedure p = (Object arg) -> System.out.println(arg); Procedure p = (arg) -> System.out.println(arg); Procedure p = arg -> System.out.println(arg); Procedure p = arg -> { System.out.println(arg); // pokud se ma vratiti hodnota: return "XXX"; Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 4 / 10

Lambda výrazy lze použít i odkazy na metody, operátor :: Trida::statickaMetoda Trida::metoda objekt::metoda Trida::new (konstruktor) class Foo { public static void main(string[] args) { Procedure p = Foo::bar; p.invoke("123"); public static void bar(object arg) { System.out.println(arg); Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 5 / 10

Předchystané funkcionální rozhraní baĺıček java.util.function Supplier<T> metoda T get() Consumer<T> metoda void accept(t t) Predicate<T> metoda boolean test(t t) Function<T, R> metoda R apply(t t) BiFunction<T, U, R> metoda R apply(t t, U u) BiOperator<T,> metoda T apply(t t1, T T2)... Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 6 / 10

Problém s null v kolekcích Map<String, String> foo = new HashMap<>(); foo.put("a", null); foo.get("a"); // ==> null foo.containskey("a"); // ==> true Nová třída Optional<T> obalující výsledky. Optional<T> o =... o.ispresent() // predikat o.ispresent(consumer<t> c) // provedeni consumeru o.orelse(t t) // nahradni hodnota o.orelseget(supplier<t> s) // ziska hodnotu odjinud Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 7 / 10

Stream API Vytvoření streamu z hodnot: Stream.of(1, 2, 3) z pole: Stream.of(fooArray) z kolekce: foo.stream() z jiného streamu: stream.map, stream.filter,... Operace se streamy (1/2) stream.count() vrací počet hodnot stream.filter(predicate p) ponechá ve streamu pouze hodnoty splňující daný predikát stream.distinct() odstraní duplicity (equals) stream.map(function f) aplikuje funkci na každou hodnotu stream.foreach(consumer c) s každým prvkem provede danou operaci stream.sorted(), stream.sorted(comparator c) setřídí stream Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 8 / 10

Stream API Operace se streamy (2/2) stream.findfirst() vrací první prvek streamu (hodnota je typu Optional) stream.findany() vrací jakýkoliv prvek streamu (opět hodnota typu Optional) stream.allmatches(predicate p) vrací true, pokud všechny hodnoty odpovídají predikátu stream.anymatch(predicate p) vrací true, pokud alespoň jedna hodnota odpovídá predikátu stream.nonematch(predicate p) vrací true, pokud ani jedna hodnota neodpovídá predikátu stream.max(comparator c) nejmenší hodnota ve streamu stream.min(comparator c) největší hodnota ve streamu stream.limit(int n) omezí délku streamu na n prvků stream.skip(int n) přeskočí prvních n prvků Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 9 / 10

Stream API Konverze streamu na hodnoty metoda stream.collect(...) hotové řešení ve tříde java.util.stream.collectors Stream.of(employees).map(Employee::getName).iterator(); Stream.of(employees).map(Employee::getName).collect(Collectors.toList()); Stream.of(employees).map(Employee::getName).collect(Collectors.toSet()); Stream.of(employees).map(Employee::getName).collect(Collectors.joining(",")); Stream.of(employees).collect(Collectors.groupingBy(Employee::getDept))); Stream.of(employees).map(Employee::getName).toArray(String[]::new); Paralelizace stream.parallel() vrací paralelní stream; další operace (např. map, foreach mohou být prováděny souběžně) Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 10 / 10