Java.util.streams Proud (stream) umožňuje na principu roury agregované zpracování dat - objektů či int, long, double. Proud je definován sekvencí metod.

Slides:



Advertisements
Podobné prezentace
Java.lang.Object Tato nejobecnější třída je kořenem hierarchického stromu. Nemá žádné dostupné atributy, má jen implicitní konstruktor a 11 přetížených,
Advertisements

Funkce Připomeňme si program pro výpočet faktoriálu:
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Práce se soubory. Ukládání dat Textové soubory s jednoduchou strukturou (např..txt a.csv) textové soubory s vnitřní hierarchií (např..xml) Soubory binárního.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Polymorfismus Dědičnost
Druhé cvičení Vytváření identifikátorů Datové typy
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy.
Třída jako zdroj funkcionality
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Identity Field Radim Veselý ČVUT v Praze Radim Veselý ČVUT v Praze Michal Kouřík ČVUT v Praze
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
Vaše jistota na trhu IT Interní datové typy Rudolf Pecinovský
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
Sedmé cvičení Soubory Vstupně/výstupní proudy. Java cv72 Soubory Třída File Objekt popisující soubor na filesystému Nedá se z něho přímo číst a psát Představuje.
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
Šesté cvičení Výjimky Balíky.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
PŘÍKAZ while úkol 1_42.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Petr Chmelař UIFS FIT VUT JAVA pro PDB Kafe? Jako C++ Zrníčka 1 / 12 Java rychlokvaška pro PDB [ ]
ZADÁNÍ Sestavte program, který vytiskne n hvězdiček.
Novinky jazyka Java 8 Programovací jazyk Java. Funkční rozhraní (Function interfaces) Rozhraní deklarující právě jednu abstraktní metodu (tj. vyžadující.
PJV05 1 Balíček java.io je rozsáhlý, obecně koncipovaný systém sloužící pro vstup, výstup a přenos dat. Hlavními součástmi jsou potomci čtyř abstraktních.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Memento. Motivace – kalkulačka 210° sin * /20 ? 0.25 ^2 ?
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Kontrola Dekorátory CheckedInputStream resp. CheckedOutputStream usnadňují kontolu nenarušenosti InputStreamu resp. OutputStreamu pomocí kontroního.
Přetěžování metod (1) Přetěžování metod – overloading:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
COM – Práce s objektovým modelem jiné aplikace
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Java 8: Mary Had a Little Lambda
Programování v jazyce C++
Kolekce je sbírka objektů v operační paměti, organizovaná dle JCF ( Java Collection Framework ). JCF sídlí v balíčku java.util a zahrnuje zejména: Interfejsy:
C# konzole – Program emoce
Kolekce je sbírka objektů v operační paměti, organizovaná dle JCF ( Java Collection Framework ). JCF sídlí v balíčku java.util a zahrnuje zejména: Interfejsy:
Polymorfismus = Mnohotvarost
Iterator<String>
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Programovací jazyk Java
Reflexe jako introspekce
ALG 09 Radix sort (přihrádkové řazení) Counting sort
Digitální učební materiál
C# přehled vlastností.
Vázání dat Data Binding
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Dynamické programování Optimální binární vyhledávací strom
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Adapter
Hledání k-tého nejmenšího prvku
Bridge.
Transkript prezentace:

java.util.streams Proud (stream) umožňuje na principu roury agregované zpracování dat - objektů či int, long, double. Proud je definován sekvencí metod a je tzv. líný – nepracuje napřed do zásoby, nýbrž až po iniciaci terminální operace. Zdroj lze využít jen jednou. Tok zajišťuje jediné běžné vlákno. source - - - intermediate - - - terminal RESULT SUCTION Collection c.stream() Arrays.stream( ) java.nio.file.File.lines( ) bufferedRdr.lines( ) Stream.of( … ) Stream.iterate( , ) IntStream.range( , ) LongStream.range( , ) Stream.generate( Supplier s ) Stream.empty() “ abc“ .chars() .split() Stream.concat(-> | # , -> | # ) Random.ints( ) BitSet filter( Predicate p ) sorted( [Comparator c] ) map( Function f ) flatMap( Function f ) peek( Consumer c ) distinct( ) limit( long n ) skip ( long n ) mapToInt( ToIntFunction f ) flatMapToInt( Function f ) onClose( ) parallel( ) unordered( ) void forEach( Consumer c ) void forEachOrdered( Consumer c ) collect( -> ) boolean anyMatch( Predicate p ) boolean {all|none}Match( Predicate p ) long count( ) reduce( -> | # ) toArray( ) {max|min}( Comparator c ) boolean findAny() boolean findFirst() iterator() spliterator() Lokesh Gupta: http://howtodoinjava.com/2014/04/13/java-8-tutorial-streams-by-examples http://howtodoinjava.com/2014/05/04/read-file-line-by-line-in-java-8-streams-of-lines-example PJV04

java.util.streams pro int/long/double AutoCloseable BaseStream Stream Collector <T,S..> <T> <T,A,R> Characteristics IntStream + Stream Support Collectors …… asDoubleStream() average() boxed() mapToLong( -> ) mapToObj( -> ) static range( , ) static rangeClosed( , ) sum() summaryStatistics() toArray() static static …… stream( , ) intStream( , ) averagingInt( -> | # ) collectingAndThen( , ) counting() groupingBy( ) groupingByConcurrent( ) joining( ) mapping( , ) {max|min}By( -> | # ) partitioningBy( ) reducing( , ) summarizingInt( -> | # ) summingInt( -> | # ) toCollection(-> | # ) toConcurrentMap(-> | # ) toList() toMap(-> | # ) toSet() Int alter Long Double PJV04

.stream.BaseStream<T,S extends BaseStream<T,S>> boolean isParallel( ) // static methods only Iterator<T> iterator( ) S onClose( Runnable closeHandler ) S parallel( ) S sequential( ) Spliterator<T> spliterator( ) S unordered( ) PJV25

Interfejs java.util.stream.Stream<T> 1/2 je potomkem BaseStream<T, Stream<T>> static <T> Stream<T> concat( Stream<? extends T> a, Stream<? extends T> b ) static <T> Stream<T> empty( ) static <T> Stream<T> generate( Supplier<T> s ) static <T> Stream<T> iterate( T seed, UnaryOperator f ) s, f(s), f(f(s)), … static <T> Stream<T> of( T t ), of( T … values ) – hodnota či pole static <T> Stream.Builder<T> build( ) boolean allMatch( ), noneMatch( ), anyMatch( ) <R,A> R collect( Collector<? super T, R> collector ) long count( ) Stream<T> distinct( ) - propustí jen unikátní hodnoty Stream<T> filter( Predicate< ? super T > predicate ) Optional<T> findAny( ), findFirst( ) flatMap( … ) void forEach( Consumer< ? super T > action ) short circuitting PJV25

Interfejs java.util.stream.Stream<T> 2/2 Stream<T> limit( long maxSize ) <R> Stream<R> map( Function <? super T, ? extends R> mapper ) IntStream mapToInt( ToIntFunction <? super T> mapper ) Optional<T> max( ), min( ) Stream<T> peek( Consumer<? super T> action ) - pro diagnostiku Optional<T> reduce( BinaryOperator accumulator ) - kumulace T reduce( T identity, BinaryOperator accumulator ) Stream<T> skip( long n ) - přeskočení Stream<T> sorted( ), sorted( Comparator<? super T> comparator ) Object[ ] toArray( ) PJV25

java.util.stream. StreamSupport public final class StreamSupport { // static methods only IntStream intStream( Spliterator.ofInt spliterator, boolean parallel ) IntStream intStream( Supplier <? extends Spliterator.ofInt > supplier, int characteristics, boolean parallel ) <T> Stream<T> stream( Spliterator<T> spliterator, boolean parallel ) <T> Stream<T> stream( Supplier <? extends Spliterator<T>> supplier, } PJV25

Finální třída java.util.stream.Collectors její statické metody vracejí kolektory pro praktické redukční operace: <T> Collector<T, ?, Double> averagingInt( ToIntFunction<? super<T> mpr) <T> Collector<T, ?, Long> counting() collectingAndThen <T,K> Collector<T,?,Map<K,List<T>>> groupingBy( Function<? super T> Collector<CharSeq,?,String> joining( CharSequence deleimiter ) <T,U,A,R> Collector<T,?,R> mapping(Function< > mpr,Collector<> stream) <T> Collector<T,?,Optional<T>> max/minBy( Comparator<? super T> cmp) <T> Collector<T,?,Map<Boolean,D>> partitioningBy(Predicate<?superT> p. <T> Collector<T,?,Optional<T>> reducing( BinaryOperator op ) <T> Collector<T,?,Int Sum~> summarizingInt(ToIntFunction<? super<T> m) <T> Collector<T,?,Integer> summingInt(ToIntFunction< ? super T > mpr) <T,C extends Collection <T>> Collector<T,?,C> toCollection( Supplier<C ) <T> Collector<T,?,List<T>> toList(), toSet() toMap toConcurrentMap PJV25

Příklady Integer[ ] a = { 0,1,2,3,4,5,6,7,8,9 }; Stream<Integer> s1 = Stream.of( a ); // proud z pole s1.sort( ).forEach( w -> { System.out.println(w); } ); // sort a výpis long count = s1.collect( Collectors.counting( ) ); // počet položek Stream<Integer> s2 = Stream.of( a ).limit( 5 ); // jen prvních pět položek double avg = s2.collect( Collectors.averagingInt( x -> x ) ); // průměr Stream<Person> s3 = kolekceOsob.stream( ); // proud z kolekce double avg = s3.collect( Collectors.averagingDouble( p -> p.getPlat( ) ) ); List b = Arrays.asList( "A","BB","CCC" ); // tvorba kolekce Stream<String> s4 = b.stream( ); // proud z kolekce double avg = s4.collect( Collectors.averagingInt( String::length ) ); Optional w = b.stream( ).reduce( ( u, v ) -> u = u + "-" + v ); PJV04

Příklady vytvoření statistiky IntConsumer st = new IntSummaryStatistics( ); Integer[ ] a = { 0,1,2,3,4,5,6,7,8,9 }; for ( int k : a ) st.accept( k ); Collection<Integer> b = Arrays.asList( 0,1,2,3,4,5,6,7,8,9 ); Spliterator<Integer> sp = b.spliterator( ); sp.forEachRemaining( st::accept ); Collector<Integer, ?, IntSummaryStatistics> coSt = Collectors.summarizingInt( x -> x ); IntSummaryStatistics iss = b.stream( ).collect( coSt ); Tisk vytvořené statistiky: System.out.println( b.stream( ).collect( Collectors.summarizingInt( x -> x ) ) ); PJV04

Příklad: statistika znaků String[ ] p = { "AAA", "BB", "C" }; int[ ] stat = new int[ 128 ]; Arrays.asList( p ) // tvorba statistiky .stream( ).forEach( s -> s.chars( ).forEach( n -> stat[ n ]++ ) ); for ( int i = 0; i < stat.length; i++) // tisk statistiky if( stat[ i ] > 0 ) System.out.println( (char) i+" "+stat[ i ] ); List<String> Stream<String> IntStream PJV04

Příklad grouping a partitioning Budiž Collection col = Arrays.asList( "A","BB","CCC","DDD","EE","F" ); Stream<String> stream = col.stream( ); Map<Integer, List<String>> map = stream .collect( Collectors.groupingBy( x -> x.length( ) ) ); System.out.println( map ); // ~ { 1=[A, F], 2=[BB, EE], 3=[CCC, DDD] } Map<Boolean, List<String>> map = stream .collect( Collectors.partitioningBy( t -> t.length( ) % 2 == 0 ) ); System.out.println( map ); // ~ { false=[A, CCC, DDD, F], true=[BB, EE] } PJV04

Příklady redukce Budiž Collection col = Arrays.asList( "A","BB","CCC","DDD","EE","F" ); Stream<String> stream = col.stream( ); Optional<Integer> opt = stream .map( t -> t.length() ) .reduce( ( a, e ) -> a + e ); System.out.println( opt ); // ~ Optional[12] OptionalInt opt = IntStream.iterate( 111, i -> --i ).limit( 5 ) .reduce( ( acu, elem ) -> Math.min( acu, elem ) ); System.out.println( opt ); // ~ Optional[107] System.out.println( IntStream.iterate( 1, i -> i+1 ).limit( 5 ) .reduce( ( a, e ) -> a * e ).getAsInt( ) ); // = 120 = 5 ! PJV04

Příklad konverze proudu a redukce Stream<Integer> s = list.stream( ); double result = s.filter( x -> true ) // čirá propust .map( R -> ++R ) // inkrementace hodnot .map( r -> new Double(r) ) .map( r -> Double.valueOf(r) ) // konverze do Double .map( r -> Double.valueOf ) .map( Double:: new ) .collect( Collectors.summingDouble( Double::doubleValue ) ) ; .collect( Collectors.averagingDouble( r -> r.doubleValue() ) ); .collect( Collectors.averagingDouble( r -> r ) ); System.out.println( result ); ekvivalentní možnosti např. možnosti PJV04

Příklad spliteratoru s externími zdroji Stream<String> s = java.nio.file.File.lines ( Paths.get( ".", "data.txt" ) ); new BufferedReader( new FileReader( "data.txt" ) ).lines( ); Spliterator<String> sp = s.limit( 42 ) // jen trochu dat .spliterator( ); Cons cons = new Cons( ); // konzumující objekt while ( sp.tryAdvance( cons::accept ) ) ; class Cons implements Consumer<String> { public void accept( String t ) { System.out.print( t ); } } ekvivalentní možnosti PJV04