SlideShare a Scribd company logo
1 of 44
Download to read offline
Εργαστήριο
JCrete Raspberry Pi Gaming
Stephen Chin
Lead Java Community Manager
JavaOne Community Chair
@steveonjava
Που χρησιµοποιείται η Java?
Που χρησιµοποιείται η Java?
Java και 3G σε ένα πολύ µικρό πακέτο
>  Cinterion EHS5
Πραγµατικά πολύ µικρό…
27.6mm
18.8mm
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
=
Java µε το γλυκό σας
Raspberry Pi
Τα Pi είναι προσιτά
$35
Τα Pi είναι προσιτά
$35 1 κουτί πάµπερς
Ένα ποδήλατο
(µε µόνο 1 ρόδα)
Μια τούρτα
Οθόνη αφής Chalkboard Electronics
§  10" ή 7”
§  Συνδέεται µέσω HDMI/USB
§  Ελέγχθηκε µε JavaFX 8
§  10% κωδικός έκπτωσης:
G1F0U796Z083
Πώς να στήσετε το Pi σας
>  Βήµα 1: Εγκαταστήστε το Linux
>  Βήµα 2: Κατεβάστε τη Java 8 για ARM
>  Βήµα 3: Εγκαταστήστε και τρέξτε την
>  εφαρµογή σας στην εικονική µηχανή
>  Java (JVM)
http://steveonjava.com/
javafx-on-raspberry-pi-3-easy-steps/
Ηλεκτρονική Ασφάλεια
>  Βγάλτε το Pi από την µπρίζα
>  Ξεφορτωθείτε το στατικό ηλεκτρισµό
αγγίζοντας µια µεταλλική επιφάνεια
>  Μην αγγίζετε καλώδια/µεταλλικές
επιφάνειες του Pi
>  Ποτέ µην αφαιρείτε/εισάγετε µια κάρτα
SD όσο το έχετε στο ρεύµα
12
Τι περιέχει το κιτ του εργαστηρίου
1.  Οθόνη αφής
2.  Κάρτα SD
3.  Πληκτρολόγιο
4.  Κίτρινο κουτί:
l  Τροφοδοτικό
l  Καλώδιο/Πλακέτα LVDS
l  Raspberry Pi Mοντέλο B
l  Καλώδιο Mini-USB (ρεύµα)
l  Καλώδιο Micro-USB (πληκτρολόγιο)
Παρακαλείστε να µην τα χάσετε
Συναρµολογήστε το Pi (Μέρος A)
1.  Εισάγετε την κάρτα SD στο Pi
l  Θα πρέπει να φαίνεται το κάτω µέρος της όταν
κοιτάτε το Pi από πάνω
2.  Εισάγετε την πλακέτα HDMI στην υποδοχή
HDMI
3.  Συνδέστε το καλώδιο ρεύµατος του Pi στην
πλακέτα HDMI
l  Χρησιµοποιείστε το κοντό καλώδιο Micro USB
14
Σηµαντικό: Συνδέστε τα όλα προτού το βάλετε στη µπρίζα
Συναρµολογήστε το Pi (Μέρος Β)
4.  Συνδέστε το καλώδιο LCD στο πίσω µέρος της οθόνης
l  Η µεριά µε τους χρυσούς συνδετήρες πάει πάνω
l  Προσοχή, ο συνδετήρας είναι εύθραυστος!
5.  Συνδέστε το πληκτρολόγιο USB
6.  Συνδέστε το καλώδιο USB σε µια από τις θύρες USB του Pi
l  Παρέχει την αφή
15
Ελέγξτε όλες τις συνδέσεις και συνδέστε το στο ρεύµα
Δουλεύει;
>  Θα πρέπει να δείτε τα φωτάκια LED να αναβοσβήνουν που σηµαίνει
ότι το Pi ξεκινάει
l  Η διαδικασία παίρνει περίπου 30 δευτερόλεπτα
>  Η οθόνη LCD θα πρέπει να ανάψει
l  Μπορεί να φαίνεται θολή αν παρεµποδίζεται ο αισθητήρας φωτός
>  Και θα πρέπει να δείτε την οθόνη εκκίνησης του Linux µε πολύ
κείµενο
Συνδεθείτε
Στην προτροπή σύνδεσης (login prompt) εισάγετε το όνοµα χρήστη:
>  pi
Και τον κωδικό:
>  raspberry
Τρέξτε την εφαρµογή JavaFX
Πηγαίντε στον παρακάτω φάκελο:
>  cd MaryHadALittleLambda
Τρέξτε την εντολή:
>  ant
19
Η Μαρία είχε ένα µικρό λ
Η Μαρία είχε ένα µικρό λ
Του οποίου το δέρµα ήταν άσπρο σα το χιόνι
Και όπου και να πήγαινε η Μαρία
Πήγαινε και το λ!
https://github.com/steveonjava/MaryHadALittleLambda
Δηµιουργώντας Ροές
Από µια συλλογή:
>  anyCollection.stream();	
Από ένα σύνολο αντικειµένων:
>  Stream.of("bananas",	"oranges",	"apples");
Από µια περιοχή αριθµών:
>  IntStream.range(0,	50)
Επαναληπτικά:
>  Stream.iterate(Color.RED,		
>  		c	->	Color.hsb(c.getHue()	+	.1,	c.getSaturation(),		
>  																																		c.getBrightness()));	
21
Ας δηµιουργήσουµε µερικά ζώα!
SpriteView	tail	=	s.getAnimals().isEmpty()	?	
		s	:	s.getAnimals().get(s.getAnimals().size()	-	1);	
	
Stream.iterate(tail,	SpriteView.Lamb::new)	
				.skip(1).limit(7)	
				.forEach(s.getAnimals()::add);	
22
23
Φιλτράροντας Ροές
Έκφραση Ελέγχου
>  public	interface	Predicate<T>	{	
>  		public	boolean	test(T	t);	
>  }	
Ας φιλτράρουµε τα µικρά παιδιά
>  adults	=	attendees.filter(a	->	a.getAge()	>=	1.8)	
24
Προβατάκια µε χρώµατα ουράνιου τόξου!
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));	
25
26
Φιλτράροντας Συλλογές Αντικειµένων
Collection.removeIf
>  Αφαιρεί όλα τα αντικείµενα που ικανοποιούν το κριτήριο
List.replaceAll
>  Αντικαθιστά τα αντικείµενα που ικανοποιούν το κριτήριο
ObservableCollection.filtered
>  Επιστρέφει µια φιλτραρισµένη λίστα βάσει ενός κριτηρίου
27
Φαγητό…
	
Predicate<SpriteView>	pure	=	
		a	->	a.getColor()	==	null;	
	
mealsServed.set(mealsServed.get()	+	
		s.getAnimals().filtered(pure).size()	
);	
	
s.getAnimals().removeIf(pure);	
28
29
Αντιστοίχηση Ροών
Εφαρµόζει µια συνάρτηση αντιστοίχισης σε κάθε στοιχείο:
>  Function<?	super	T,	?	extends	R>	
Αποτέλεσµα: Η λίστα έχει το ίδιο µέγεθος αλλά τα στοιχεία της µπορεί να
είναι διαφορετικά.
30
Απλή Αντιστοίχηση
s.getAnimals().setAll(s.getAnimals()	
				.stream()	
				.map(sv	->	new	Eggs(sv.getFollowing())	
				.collect(Collectors.toList())	
);	
31
Ή διπλή αντιστοίχιση!
s.getAnimals().setAll(s.getAnimals()	
				.stream()	
				.map(SpriteView::getFollowing)	
				.map(Eggs::new)	
				.collect(Collectors.toList())	
);	
32
33
Επίπεδη Αντιστοίχιση (Flat Map)
Εφαρµόζει µια συνάρτηση αντιστοίχισης Ένα-προς-Πολλά (One-to-Many)
σε κάθε στοιχείο:
>  Function<? super T, ? extends Stream<? extends R>>
Και στη συνέχεια µετατρέπει τις πολλαπλές ροές σε µία µόνο.
Αποτέλεσµα: Η λίστα µπορεί να µεγαλώσει και τα στοιχεία της µπορεί να
είναι διαφορετικά.
34
Επωάζοντας αυγά
s.getAnimals().setAll(s.getAnimals()	
				.stream()	
				.flatMap(SpriteView.Eggs::hatch)	
				.collect(Collectors.toList())	
);	
35
36
Μείωση (Reduce)
Μειώνει µια λίστα σε ένα µόνο στοιχείο δοθέντος:
>  της αρχικής τιµής: T
>  του συσσωρευτή: BinaryOperator<T>
Αποτέλεσµα: Λίστα του ίδιου τύπου, αλλά µε ένα µόνο στοιχείο.
37
Και η (προηγουµένως µικρή) αλεπού τους έφαγε
όλους!
Double	mealSize	=	shepherd.getAnimals()	
				.stream()	
				.map(SpriteView::getScaleX)	
				.reduce(0.0,	Double::sum);	
	
setScaleX(getScaleX()	+	mealSize	*	.2);	
setScaleY(getScaleY()	+	mealSize	*	.2);	
shepherd.getAnimals().clear();	
38
39
Η Μαρία είχε ένα µικρό έργο λ
>  Έργο Ανοικτού Κώδικα για να δείξει τα χαρακτηριστικά του
συναρτησιακού λ-προγραµµατισµού
>  Εικονική αναπαράσταση ροών (streams), φίλτρων (filters) και
αντιστοιχίσεων (maps)
40
https://github.com/steveonjava/MaryHadALittleLambda
Τι άλλο µπορείτε να κάνετε…
>  Αλλαγές στο MaryHadALittleLambda:
l  Αλλάξτε τον αριθµό των προβάτων
l  Δηµιουργήστε το ουράνιο τόξο µε διαφορετικά χρώµατα
l  Αλλάξτε το µέγεθος της αλεπούς να είναι πιο παχιά/αδύνατη
l  Προσθέστε νέα γραφικά (νέα αρχεία εικόνων στο φάκελο
images/extra)
41
camel.png	 lion.png	 greendragon.png	 cow.png	 brownbear.png
Αλλάζοντας τον κώδικα
Τρέξτε τον επεξεργαστή κειµένου nano:
>  nano src/sample/MapObject.java
Αποθηκεύστε τις αλλαγές σας:
>  Control-O Enter
Κλείστε τον nano:
>  Control-X
Μεταγγλωτίστε/Εκτελέστε:
>  ant
Stephen Chin
tweet: @steveonjava
blog: http://steveonjava.com
nighthacking.com
Real Geeks
Live Hacking
NightHacking Tour
‘Ωρα για Hacking!
Δήλωση Ασφαλούς Λιµανιού
Η παρουσίαση αυτή έχει σκοπό να περιγράψει τη γενική
κατεύθυνση των προϊόντων µας. Προορίζεται µόνο για
ενηµερωτικούς σκοπούς και δεν µπορεί να ενσωµατωθεί σε
οποιαδήποτε σύµβαση. Δεν υπάρχει δέσµευση παράδοσης
οποιουδήποτε υλικού, κώδικα ή λειτουργικότητας και δεν θα
πρέπει να γίνεται επίκληση για τη λήψη αποφάσεων αγοράς.
Η ανάπτυξη, έκδοση, και χρονοδιάγραµµα των οποιονδήποτε
χαρακτηριστικών ή λειτουργιών που περιγράφονται για τα
προϊόντα της Oracle παραµένει στη διακριτική ευχέρεια της
Oracle.

More Related Content

Featured

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 

Featured (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

JCrete4Kids 2016 Raspberry Pi workshop - greek

  • 1. Εργαστήριο JCrete Raspberry Pi Gaming Stephen Chin Lead Java Community Manager JavaOne Community Chair @steveonjava
  • 4. Java και 3G σε ένα πολύ µικρό πακέτο >  Cinterion EHS5
  • 7. = Java µε το γλυκό σας Raspberry Pi
  • 8. Τα Pi είναι προσιτά $35
  • 9. Τα Pi είναι προσιτά $35 1 κουτί πάµπερς Ένα ποδήλατο (µε µόνο 1 ρόδα) Μια τούρτα
  • 10. Οθόνη αφής Chalkboard Electronics §  10" ή 7” §  Συνδέεται µέσω HDMI/USB §  Ελέγχθηκε µε JavaFX 8 §  10% κωδικός έκπτωσης: G1F0U796Z083
  • 11. Πώς να στήσετε το Pi σας >  Βήµα 1: Εγκαταστήστε το Linux >  Βήµα 2: Κατεβάστε τη Java 8 για ARM >  Βήµα 3: Εγκαταστήστε και τρέξτε την >  εφαρµογή σας στην εικονική µηχανή >  Java (JVM) http://steveonjava.com/ javafx-on-raspberry-pi-3-easy-steps/
  • 12. Ηλεκτρονική Ασφάλεια >  Βγάλτε το Pi από την µπρίζα >  Ξεφορτωθείτε το στατικό ηλεκτρισµό αγγίζοντας µια µεταλλική επιφάνεια >  Μην αγγίζετε καλώδια/µεταλλικές επιφάνειες του Pi >  Ποτέ µην αφαιρείτε/εισάγετε µια κάρτα SD όσο το έχετε στο ρεύµα 12
  • 13. Τι περιέχει το κιτ του εργαστηρίου 1.  Οθόνη αφής 2.  Κάρτα SD 3.  Πληκτρολόγιο 4.  Κίτρινο κουτί: l  Τροφοδοτικό l  Καλώδιο/Πλακέτα LVDS l  Raspberry Pi Mοντέλο B l  Καλώδιο Mini-USB (ρεύµα) l  Καλώδιο Micro-USB (πληκτρολόγιο) Παρακαλείστε να µην τα χάσετε
  • 14. Συναρµολογήστε το Pi (Μέρος A) 1.  Εισάγετε την κάρτα SD στο Pi l  Θα πρέπει να φαίνεται το κάτω µέρος της όταν κοιτάτε το Pi από πάνω 2.  Εισάγετε την πλακέτα HDMI στην υποδοχή HDMI 3.  Συνδέστε το καλώδιο ρεύµατος του Pi στην πλακέτα HDMI l  Χρησιµοποιείστε το κοντό καλώδιο Micro USB 14 Σηµαντικό: Συνδέστε τα όλα προτού το βάλετε στη µπρίζα
  • 15. Συναρµολογήστε το Pi (Μέρος Β) 4.  Συνδέστε το καλώδιο LCD στο πίσω µέρος της οθόνης l  Η µεριά µε τους χρυσούς συνδετήρες πάει πάνω l  Προσοχή, ο συνδετήρας είναι εύθραυστος! 5.  Συνδέστε το πληκτρολόγιο USB 6.  Συνδέστε το καλώδιο USB σε µια από τις θύρες USB του Pi l  Παρέχει την αφή 15 Ελέγξτε όλες τις συνδέσεις και συνδέστε το στο ρεύµα
  • 16. Δουλεύει; >  Θα πρέπει να δείτε τα φωτάκια LED να αναβοσβήνουν που σηµαίνει ότι το Pi ξεκινάει l  Η διαδικασία παίρνει περίπου 30 δευτερόλεπτα >  Η οθόνη LCD θα πρέπει να ανάψει l  Μπορεί να φαίνεται θολή αν παρεµποδίζεται ο αισθητήρας φωτός >  Και θα πρέπει να δείτε την οθόνη εκκίνησης του Linux µε πολύ κείµενο
  • 17. Συνδεθείτε Στην προτροπή σύνδεσης (login prompt) εισάγετε το όνοµα χρήστη: >  pi Και τον κωδικό: >  raspberry
  • 18. Τρέξτε την εφαρµογή JavaFX Πηγαίντε στον παρακάτω φάκελο: >  cd MaryHadALittleLambda Τρέξτε την εντολή: >  ant
  • 19. 19
  • 20. Η Μαρία είχε ένα µικρό λ Η Μαρία είχε ένα µικρό λ Του οποίου το δέρµα ήταν άσπρο σα το χιόνι Και όπου και να πήγαινε η Μαρία Πήγαινε και το λ! https://github.com/steveonjava/MaryHadALittleLambda
  • 21. Δηµιουργώντας Ροές Από µια συλλογή: >  anyCollection.stream(); Από ένα σύνολο αντικειµένων: >  Stream.of("bananas", "oranges", "apples"); Από µια περιοχή αριθµών: >  IntStream.range(0, 50) Επαναληπτικά: >  Stream.iterate(Color.RED, >  c -> Color.hsb(c.getHue() + .1, c.getSaturation(), >  c.getBrightness())); 21
  • 22. Ας δηµιουργήσουµε µερικά ζώα! SpriteView tail = s.getAnimals().isEmpty() ? s : s.getAnimals().get(s.getAnimals().size() - 1); Stream.iterate(tail, SpriteView.Lamb::new) .skip(1).limit(7) .forEach(s.getAnimals()::add); 22
  • 23. 23
  • 24. Φιλτράροντας Ροές Έκφραση Ελέγχου >  public interface Predicate<T> { >  public boolean test(T t); >  } Ας φιλτράρουµε τα µικρά παιδιά >  adults = attendees.filter(a -> a.getAge() >= 1.8) 24
  • 25. Προβατάκια µε χρώµατα ουράνιου τόξου! 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)); 25
  • 26. 26
  • 27. Φιλτράροντας Συλλογές Αντικειµένων Collection.removeIf >  Αφαιρεί όλα τα αντικείµενα που ικανοποιούν το κριτήριο List.replaceAll >  Αντικαθιστά τα αντικείµενα που ικανοποιούν το κριτήριο ObservableCollection.filtered >  Επιστρέφει µια φιλτραρισµένη λίστα βάσει ενός κριτηρίου 27
  • 29. 29
  • 30. Αντιστοίχηση Ροών Εφαρµόζει µια συνάρτηση αντιστοίχισης σε κάθε στοιχείο: >  Function<? super T, ? extends R> Αποτέλεσµα: Η λίστα έχει το ίδιο µέγεθος αλλά τα στοιχεία της µπορεί να είναι διαφορετικά. 30
  • 33. 33
  • 34. Επίπεδη Αντιστοίχιση (Flat Map) Εφαρµόζει µια συνάρτηση αντιστοίχισης Ένα-προς-Πολλά (One-to-Many) σε κάθε στοιχείο: >  Function<? super T, ? extends Stream<? extends R>> Και στη συνέχεια µετατρέπει τις πολλαπλές ροές σε µία µόνο. Αποτέλεσµα: Η λίστα µπορεί να µεγαλώσει και τα στοιχεία της µπορεί να είναι διαφορετικά. 34
  • 36. 36
  • 37. Μείωση (Reduce) Μειώνει µια λίστα σε ένα µόνο στοιχείο δοθέντος: >  της αρχικής τιµής: T >  του συσσωρευτή: BinaryOperator<T> Αποτέλεσµα: Λίστα του ίδιου τύπου, αλλά µε ένα µόνο στοιχείο. 37
  • 38. Και η (προηγουµένως µικρή) αλεπού τους έφαγε όλους! Double mealSize = shepherd.getAnimals() .stream() .map(SpriteView::getScaleX) .reduce(0.0, Double::sum); setScaleX(getScaleX() + mealSize * .2); setScaleY(getScaleY() + mealSize * .2); shepherd.getAnimals().clear(); 38
  • 39. 39
  • 40. Η Μαρία είχε ένα µικρό έργο λ >  Έργο Ανοικτού Κώδικα για να δείξει τα χαρακτηριστικά του συναρτησιακού λ-προγραµµατισµού >  Εικονική αναπαράσταση ροών (streams), φίλτρων (filters) και αντιστοιχίσεων (maps) 40 https://github.com/steveonjava/MaryHadALittleLambda
  • 41. Τι άλλο µπορείτε να κάνετε… >  Αλλαγές στο MaryHadALittleLambda: l  Αλλάξτε τον αριθµό των προβάτων l  Δηµιουργήστε το ουράνιο τόξο µε διαφορετικά χρώµατα l  Αλλάξτε το µέγεθος της αλεπούς να είναι πιο παχιά/αδύνατη l  Προσθέστε νέα γραφικά (νέα αρχεία εικόνων στο φάκελο images/extra) 41 camel.png lion.png greendragon.png cow.png brownbear.png
  • 42. Αλλάζοντας τον κώδικα Τρέξτε τον επεξεργαστή κειµένου nano: >  nano src/sample/MapObject.java Αποθηκεύστε τις αλλαγές σας: >  Control-O Enter Κλείστε τον nano: >  Control-X Μεταγγλωτίστε/Εκτελέστε: >  ant
  • 43. Stephen Chin tweet: @steveonjava blog: http://steveonjava.com nighthacking.com Real Geeks Live Hacking NightHacking Tour ‘Ωρα για Hacking!
  • 44. Δήλωση Ασφαλούς Λιµανιού Η παρουσίαση αυτή έχει σκοπό να περιγράψει τη γενική κατεύθυνση των προϊόντων µας. Προορίζεται µόνο για ενηµερωτικούς σκοπούς και δεν µπορεί να ενσωµατωθεί σε οποιαδήποτε σύµβαση. Δεν υπάρχει δέσµευση παράδοσης οποιουδήποτε υλικού, κώδικα ή λειτουργικότητας και δεν θα πρέπει να γίνεται επίκληση για τη λήψη αποφάσεων αγοράς. Η ανάπτυξη, έκδοση, και χρονοδιάγραµµα των οποιονδήποτε χαρακτηριστικών ή λειτουργιών που περιγράφονται για τα προϊόντα της Oracle παραµένει στη διακριτική ευχέρεια της Oracle.