SlideShare a Scribd company logo
1 of 43
Download to read offline
Raspberry Pi Gaming 4 Kids
Stephen Chin (@steveonjava)

Monday, 28 October 13
Wat draait er op Java?

Monday, 28 October 13
Wat draait er op Java?

Monday, 28 October 13
Java en 3G in een Klein Pakketje
>

Cinterion EHS5

Monday, 28 October 13
Heel Klein....

18.8mm

27.6mm

Monday, 28 October 13
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
Monday, 28 October 13
Neem wat Java bij je toetje
Raspberry Pi

=
Monday, 28 October 13
Pi’s zijn Betaalbaar

€35
Monday, 28 October 13
Pi’s zijn Betaalbaar

Een Luxe Taart

Een Fiets
(alleen het wiel)

€35
Monday, 28 October 13

3/4 Pak Luiers
Chalkboad Electronics Touchscreen
§ 10" or 7" Form Factor
§ Verbind via HDMI/USB
§ Getest met JavaFX 8
§ 10% Exclusieve Korting:

G1F0U796Z083

Monday, 28 October 13
Hoe installeer je jouw Pi
>

Stap 1: Installeer Linux

>

Stap 2: Download/Copieer Java 8 voor ARM EA

>

Stap 3: Deploy and Run JVM Language Apps

http://steveonjava.com/
javafx-on-raspberry-pi-3-easy-steps/
Monday, 28 October 13
Wat zit er in jouw Lab Kit
Touch Screen
SD Card
Toetsenbord
Gele Doos:

1.
2.
3.
4.
l
l
l
l
l

Stroom Adapter
LVDS Kabel/Bord
Raspberry Pi Model B
Mini-USB Kabel (stroom)
Micro-USB Kabel (toetsenbord)
AUB: Bewaar de verpakking voor later!

Monday, 28 October 13
Electriciteit en Veiligheid!
>

Stekker uit de muur voordat je begint

>

Verwijder statische electriciteit door
een metaal oppervlak aan te raken

>

Raak onbeschermde snoeren/metaal
niet aan

>

Nooit de SD Kaart verwijderen of
aansluiten als er stroom op staat
13

Monday, 28 October 13
Aansluiten van de Pi (Deel 1)
Belangrijk: Sluit alles eerst aan voordat je er stroom op zet!

Plaats de SD Kaart in de Pi

1.
l

Lijkt ondersteboven van boven af bekeken

Plaats het HDMI bord in de HDMI plug van

2.

de Pi

Verbind de Pi stroom kabel aan het HDMI

3.

bord
l

Gebruik de Micro USB Kabel (de kortere)

14

Monday, 28 October 13
Aansluiten van de Pi (Deel 2)
Schuif de LCD kabel aan de achterkant van het
scherm

4.

l
l

De kant met gouden aansluiters moet boven
Voorzichtig, de aansluiting is kwetsbaar!

Sluit de USB uitgang aan een van de USB ports
van de Pi

5.

l

Dit is voor de touch input

Sluit het toetsenbord aan

6.
1.

Gebruik de Mini USB kabel (de langere)
Controleer de verbindingen en sluit de stroom aan
15

Monday, 28 October 13
Werkt het nu?
>

Als het goed is zie je een aantal LED lampjes oplichten, dit geeft aan
dat de Pi aan het opstarten is
l

>

Het LCD scherm zou nu moeten aangaan
l

>

Opstarten duurt ongeveer 30 seconden
Als de licht sensor belemmerd is, dan lijkt deze wat schemerig

Als het goed is zie je een Linux opstart scherm met heel veel tekst

Hacking Time!

Monday, 28 October 13
Inloggen
Bij login, type je gebruikersnaam:
> pi
En voer het wachtwoord in:
> raspberry

Monday, 28 October 13
Draai je eerste Programma
Verander de map naar de project map
> cd MaryHadALittleLambda
Run(=uitvoeren van) het script
> ant

Monday, 28 October 13
19

Monday, 28 October 13
Hack de Code
Run(=uitvoeren van) de Nano tekst editor:
> nano src/sample/MapObject.java
Bewaar je aanpassingen:
> Control-O Enter
Verlaat Nano:
> Control-X
Compileer/Run:
> ant

Monday, 28 October 13
Mary Had a Little Lamb(da)
Dit is een Engels Kinderliedje over
een meisje met een Lammetje!
Mary had a little lambda
Whose fleece was white as snow
And everywhere that Mary went
Lambda was sure to go!

https://github.com/steveonjava/MaryHadALittleLambda
Monday, 28 October 13
Het genereren van “Streams”
Van een collection (=verzameling):
> anyCollection.stream();
Bekende reeks van objecten:
> Stream.of("bananen",	
  "peren",	
  "appels");
Numerieke reeks:
> IntStream.range(0,	
  50)
Iteratief:
> Stream.iterate(Color.RED,	
  
> 	
  	
  c	
  -­‐>	
  Color.hsb(c.getHue()	
  +	
  .1,	
  c.getSaturation(),	
  
> 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c.getBrightness()));
22

Monday, 28 October 13
Nu gaan we boerderij dieren maken!
SpriteView	
  tail	
  =	
  s.getAnimals().isEmpty()	
  ?
	
  	
  s	
  :	
  s.getAnimals().get(s.getAnimals().size()	
  -­‐	
  1);
Stream.iterate(tail,	
  SpriteView.Lamb::new)
	
  	
  	
  	
  .substream(1,	
  8)
	
  	
  	
  	
  .forEach(s.getAnimals()::add);

23

Monday, 28 October 13
24

Monday, 28 October 13
Het filteren van “Streams”
Predicate Expression (een soort gezegde)
> public	
  interface	
  Predicate<T>	
  {
> 	
  	
  public	
  boolean	
  test(T	
  t);
> }
Filter de kinderen eruit
> volwassenen	
  =	
  deelnemers.filter(a	
  -­‐>	
  a.getLeeftijd()	
  >=	
  
18)

25

Monday, 28 October 13
Lammetjes in de kleuren van de regenboog!
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  2)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.YELLOW));
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  3)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.CYAN));
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  0)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.GREEN));
26

Monday, 28 October 13
27

Monday, 28 October 13
Filteren van Collections (=verzamelingen)
Collection.removeIf
> Verwijdert alle elementen die voldoen the ‘if’ expressie
List.replaceAll
> Filteren en vervanging met gebruik van 1 input
ObservableCollection.filtered
> Geeft een lijst terug van het gefilterde

28

Monday, 28 October 13
Moeilijke eters…
Predicate<SpriteView>	
  pure	
  =
	
  	
  a	
  -­‐>	
  a.getColor()	
  ==	
  null;
mealsServed.set(mealsServed.get()	
  +
	
  	
  s.getAnimals().filtered(pure).size()
);
s.getAnimals().removeIf(pure);
29

Monday, 28 October 13
30

Monday, 28 October 13
Mapping Streams
Past een Map Functie toe op elk element:
> Function<?	
  super	
  T,	
  ?	
  extends	
  R>
Resultaat: Lijst is even groot, maar kan van een ander type zijn.

31

Monday, 28 October 13
Single Map (enkele map)
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(sv	
  -­‐>	
  new	
  Eggs(sv.getFollowing())
	
  	
  	
  	
  .collect(Collectors.toList())
);

32

Monday, 28 October 13
Of een Double Map! (dubbele map)
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(SpriteView::getFollowing)
	
  	
  	
  	
  .map(Eggs::new)
	
  	
  	
  	
  .collect(Collectors.toList())
);

33

Monday, 28 October 13
34

Monday, 28 October 13
Flat Map (platte map)
Past een Een-op-Veel Map Functie toe op elk element:
> Function<? super T, ? extends Stream<? extends R>>
En maakt het dan weer plat naar een enkele map (single map).
Resultaat: De lijst kan langer worden en het type kan anders zijn.

35

Monday, 28 October 13
Broedeieren
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .flatMap(SpriteView.Eggs::hatch)
	
  	
  	
  	
  .collect(Collectors.toList())
);

36

Monday, 28 October 13
37

Monday, 28 October 13
Reduce (=verminderen)
Vermindert een lijst naar een enkel element:
> Identity: T
> Accumulator: BinaryOperator<T>
Resultaat: Lijst van hetzelfde type, maar slechts 1 element blijft over.

38

Monday, 28 October 13
En de (voorheen) kleine vos at ze allemaal op!
Double	
  mealSize	
  =	
  shepherd.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(SpriteView::getScaleX)
	
  	
  	
  	
  .reduce(0.0,	
  Double::sum);
setScaleX(getScaleX()	
  +	
  mealSize	
  *	
  .2);
setScaleY(getScaleY()	
  +	
  mealSize	
  *	
  .2);
shepherd.getAnimals().clear();

39

Monday, 28 October 13
40

Monday, 28 October 13
Mary Had a Little Lambda Project
>
>

Open-source project om lambda kenmerken te demonstreren
Visuele representatie van streams, filters en maps
https://github.com/steveonjava/MaryHadALittleLambda

41

Monday, 28 October 13
NightHacking Tour

Stephen Chin (@steveonjava)
http://steveonjava.com/

Real Geeks
Live Hacking
nighthacking.com
Monday, 28 October 13
Safe Harbor Statement
The preceding is intended to outline our general product
direction. It is intended for information purposes only, and may
not be incorporated into any contract. It is not a commitment
to deliver any material, code, or functionality, and should not
be relied upon in making purchasing decisions. The
development, release, and timing of any features or
functionality described for Oracle’s products remains at the
sole discretion of Oracle.

Monday, 28 October 13

More Related Content

Viewers also liked

JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)Stephen Chin
 
Java on Raspberry Pi Lab
Java on Raspberry Pi LabJava on Raspberry Pi Lab
Java on Raspberry Pi LabStephen Chin
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the CloudStephen Chin
 
JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java WorkshopStephen Chin
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Stephen Chin
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistStephen Chin
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic ShowStephen Chin
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXStephen Chin
 
Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Stephen Chin
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadStephen Chin
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageHacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageStephen Chin
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and DevicesStephen Chin
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)Stephen Chin
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosStephen Chin
 
JavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkJavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkStephen Chin
 

Viewers also liked (16)

JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
 
DukeScript
DukeScriptDukeScript
DukeScript
 
Java on Raspberry Pi Lab
Java on Raspberry Pi LabJava on Raspberry Pi Lab
Java on Raspberry Pi Lab
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the Cloud
 
JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java Workshop
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile Methodologist
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic Show
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFX
 
Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the Undead
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageHacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and Devices
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and Legos
 
JavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkJavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring Framework
 

More from Stephen Chin

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2Stephen Chin
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java CommunityStephen Chin
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideStephen Chin
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java DevelopersStephen Chin
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCStephen Chin
 
LUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingLUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingStephen Chin
 

More from Stephen Chin (6)

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive Guide
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java Developers
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJC
 
LUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingLUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi Hacking
 

Raspberry Pi Gaming 4 Kids - Dutch Version

  • 1. Raspberry Pi Gaming 4 Kids Stephen Chin (@steveonjava) Monday, 28 October 13
  • 2. Wat draait er op Java? Monday, 28 October 13
  • 3. Wat draait er op Java? Monday, 28 October 13
  • 4. Java en 3G in een Klein Pakketje > Cinterion EHS5 Monday, 28 October 13
  • 7. Neem wat Java bij je toetje Raspberry Pi = Monday, 28 October 13
  • 9. Pi’s zijn Betaalbaar Een Luxe Taart Een Fiets (alleen het wiel) €35 Monday, 28 October 13 3/4 Pak Luiers
  • 10. Chalkboad Electronics Touchscreen § 10" or 7" Form Factor § Verbind via HDMI/USB § Getest met JavaFX 8 § 10% Exclusieve Korting: G1F0U796Z083 Monday, 28 October 13
  • 11. Hoe installeer je jouw Pi > Stap 1: Installeer Linux > Stap 2: Download/Copieer Java 8 voor ARM EA > Stap 3: Deploy and Run JVM Language Apps http://steveonjava.com/ javafx-on-raspberry-pi-3-easy-steps/ Monday, 28 October 13
  • 12. Wat zit er in jouw Lab Kit Touch Screen SD Card Toetsenbord Gele Doos: 1. 2. 3. 4. l l l l l Stroom Adapter LVDS Kabel/Bord Raspberry Pi Model B Mini-USB Kabel (stroom) Micro-USB Kabel (toetsenbord) AUB: Bewaar de verpakking voor later! Monday, 28 October 13
  • 13. Electriciteit en Veiligheid! > Stekker uit de muur voordat je begint > Verwijder statische electriciteit door een metaal oppervlak aan te raken > Raak onbeschermde snoeren/metaal niet aan > Nooit de SD Kaart verwijderen of aansluiten als er stroom op staat 13 Monday, 28 October 13
  • 14. Aansluiten van de Pi (Deel 1) Belangrijk: Sluit alles eerst aan voordat je er stroom op zet! Plaats de SD Kaart in de Pi 1. l Lijkt ondersteboven van boven af bekeken Plaats het HDMI bord in de HDMI plug van 2. de Pi Verbind de Pi stroom kabel aan het HDMI 3. bord l Gebruik de Micro USB Kabel (de kortere) 14 Monday, 28 October 13
  • 15. Aansluiten van de Pi (Deel 2) Schuif de LCD kabel aan de achterkant van het scherm 4. l l De kant met gouden aansluiters moet boven Voorzichtig, de aansluiting is kwetsbaar! Sluit de USB uitgang aan een van de USB ports van de Pi 5. l Dit is voor de touch input Sluit het toetsenbord aan 6. 1. Gebruik de Mini USB kabel (de langere) Controleer de verbindingen en sluit de stroom aan 15 Monday, 28 October 13
  • 16. Werkt het nu? > Als het goed is zie je een aantal LED lampjes oplichten, dit geeft aan dat de Pi aan het opstarten is l > Het LCD scherm zou nu moeten aangaan l > Opstarten duurt ongeveer 30 seconden Als de licht sensor belemmerd is, dan lijkt deze wat schemerig Als het goed is zie je een Linux opstart scherm met heel veel tekst Hacking Time! Monday, 28 October 13
  • 17. Inloggen Bij login, type je gebruikersnaam: > pi En voer het wachtwoord in: > raspberry Monday, 28 October 13
  • 18. Draai je eerste Programma Verander de map naar de project map > cd MaryHadALittleLambda Run(=uitvoeren van) het script > ant Monday, 28 October 13
  • 20. Hack de Code Run(=uitvoeren van) de Nano tekst editor: > nano src/sample/MapObject.java Bewaar je aanpassingen: > Control-O Enter Verlaat Nano: > Control-X Compileer/Run: > ant Monday, 28 October 13
  • 21. Mary Had a Little Lamb(da) Dit is een Engels Kinderliedje over een meisje met een Lammetje! Mary had a little lambda Whose fleece was white as snow And everywhere that Mary went Lambda was sure to go! https://github.com/steveonjava/MaryHadALittleLambda Monday, 28 October 13
  • 22. Het genereren van “Streams” Van een collection (=verzameling): > anyCollection.stream(); Bekende reeks van objecten: > Stream.of("bananen",  "peren",  "appels"); Numerieke reeks: > IntStream.range(0,  50) Iteratief: > Stream.iterate(Color.RED,   >    c  -­‐>  Color.hsb(c.getHue()  +  .1,  c.getSaturation(),   >                                                                    c.getBrightness())); 22 Monday, 28 October 13
  • 23. Nu gaan we boerderij dieren maken! SpriteView  tail  =  s.getAnimals().isEmpty()  ?    s  :  s.getAnimals().get(s.getAnimals().size()  -­‐  1); Stream.iterate(tail,  SpriteView.Lamb::new)        .substream(1,  8)        .forEach(s.getAnimals()::add); 23 Monday, 28 October 13
  • 25. Het filteren van “Streams” Predicate Expression (een soort gezegde) > public  interface  Predicate<T>  { >    public  boolean  test(T  t); > } Filter de kinderen eruit > volwassenen  =  deelnemers.filter(a  -­‐>  a.getLeeftijd()  >=   18) 25 Monday, 28 October 13
  • 26. Lammetjes in de kleuren van de regenboog! s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  2)    .forEach(a  -­‐>  a.setColor(Color.YELLOW)); s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  3)    .forEach(a  -­‐>  a.setColor(Color.CYAN)); s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  0)    .forEach(a  -­‐>  a.setColor(Color.GREEN)); 26 Monday, 28 October 13
  • 28. Filteren van Collections (=verzamelingen) Collection.removeIf > Verwijdert alle elementen die voldoen the ‘if’ expressie List.replaceAll > Filteren en vervanging met gebruik van 1 input ObservableCollection.filtered > Geeft een lijst terug van het gefilterde 28 Monday, 28 October 13
  • 29. Moeilijke eters… Predicate<SpriteView>  pure  =    a  -­‐>  a.getColor()  ==  null; mealsServed.set(mealsServed.get()  +    s.getAnimals().filtered(pure).size() ); s.getAnimals().removeIf(pure); 29 Monday, 28 October 13
  • 31. Mapping Streams Past een Map Functie toe op elk element: > Function<?  super  T,  ?  extends  R> Resultaat: Lijst is even groot, maar kan van een ander type zijn. 31 Monday, 28 October 13
  • 32. Single Map (enkele map) s.getAnimals().setAll(s.getAnimals()        .stream()        .map(sv  -­‐>  new  Eggs(sv.getFollowing())        .collect(Collectors.toList()) ); 32 Monday, 28 October 13
  • 33. Of een Double Map! (dubbele map) s.getAnimals().setAll(s.getAnimals()        .stream()        .map(SpriteView::getFollowing)        .map(Eggs::new)        .collect(Collectors.toList()) ); 33 Monday, 28 October 13
  • 35. Flat Map (platte map) Past een Een-op-Veel Map Functie toe op elk element: > Function<? super T, ? extends Stream<? extends R>> En maakt het dan weer plat naar een enkele map (single map). Resultaat: De lijst kan langer worden en het type kan anders zijn. 35 Monday, 28 October 13
  • 36. Broedeieren s.getAnimals().setAll(s.getAnimals()        .stream()        .flatMap(SpriteView.Eggs::hatch)        .collect(Collectors.toList()) ); 36 Monday, 28 October 13
  • 38. Reduce (=verminderen) Vermindert een lijst naar een enkel element: > Identity: T > Accumulator: BinaryOperator<T> Resultaat: Lijst van hetzelfde type, maar slechts 1 element blijft over. 38 Monday, 28 October 13
  • 39. En de (voorheen) kleine vos at ze allemaal op! Double  mealSize  =  shepherd.getAnimals()        .stream()        .map(SpriteView::getScaleX)        .reduce(0.0,  Double::sum); setScaleX(getScaleX()  +  mealSize  *  .2); setScaleY(getScaleY()  +  mealSize  *  .2); shepherd.getAnimals().clear(); 39 Monday, 28 October 13
  • 41. Mary Had a Little Lambda Project > > Open-source project om lambda kenmerken te demonstreren Visuele representatie van streams, filters en maps https://github.com/steveonjava/MaryHadALittleLambda 41 Monday, 28 October 13
  • 42. NightHacking Tour Stephen Chin (@steveonjava) http://steveonjava.com/ Real Geeks Live Hacking nighthacking.com Monday, 28 October 13
  • 43. Safe Harbor Statement The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Monday, 28 October 13