Submit Search
Upload
JDK8 Lambdas and Streams Making Bulk Operations Simple
•
0 likes
•
1,325 views
AI-enhanced title
J
JAXLondon2014
Follow
JAX London presentation 2014
Read less
Read more
Presentations & Public Speaking
Report
Share
Report
Share
1 of 42
Download now
Download to read offline
Recommended
Improved Developer Productivity In JDK8
Improved Developer Productivity In JDK8
Simon Ritter
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
Simon Ritter
Java SE 8
Java SE 8
Simon Ritter
Lambdas : Beyond The Basics
Lambdas : Beyond The Basics
Simon Ritter
Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
IndicThreads
Functional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritter
Simon Ritter
55 New Features in Java SE 8
55 New Features in Java SE 8
Simon Ritter
Project Jigsaw in JDK9
Project Jigsaw in JDK9
Simon Ritter
Recommended
Improved Developer Productivity In JDK8
Improved Developer Productivity In JDK8
Simon Ritter
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
Simon Ritter
Java SE 8
Java SE 8
Simon Ritter
Lambdas : Beyond The Basics
Lambdas : Beyond The Basics
Simon Ritter
Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
IndicThreads
Functional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritter
Simon Ritter
55 New Features in Java SE 8
55 New Features in Java SE 8
Simon Ritter
Project Jigsaw in JDK9
Project Jigsaw in JDK9
Simon Ritter
Java SE 8 library design
Java SE 8 library design
Stephen Colebourne
Apouc 2014-java-8-create-the-future
Apouc 2014-java-8-create-the-future
OUGTH Oracle User Group in Thailand
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Emiel Paasschens
Java 8 Features
Java 8 Features
Leninkumar Koppoju
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
jaxLondonConference
Java SE 8 best practices
Java SE 8 best practices
Stephen Colebourne
java programming - applets
java programming - applets
HarshithaAllu
The Java Carputer
The Java Carputer
Simon Ritter
java 8 new features
java 8 new features
Rohit Verma
Java 8 Features
Java 8 Features
Trung Nguyen
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
NewCircle Training
Functional Java 8 - Introduction
Functional Java 8 - Introduction
Łukasz Biały
Automatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to Interfaces
Raffi Khatchadourian
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
DevelopIntelligence
Lambdas & Streams
Lambdas & Streams
C4Media
Java 8 - Features Overview
Java 8 - Features Overview
Sergii Stets
Exception handling
Exception handling
Ravi Kant Sahu
Lambda Expressions in Java 8
Lambda Expressions in Java 8
icarter09
Functional programming with Java 8
Functional programming with Java 8
LivePerson
Java 8 new features
Java 8 new features
Aniket Thakur
What's New in Java 8
What's New in Java 8
javafxpert
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3
Simon Ritter
More Related Content
What's hot
Java SE 8 library design
Java SE 8 library design
Stephen Colebourne
Apouc 2014-java-8-create-the-future
Apouc 2014-java-8-create-the-future
OUGTH Oracle User Group in Thailand
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Emiel Paasschens
Java 8 Features
Java 8 Features
Leninkumar Koppoju
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
jaxLondonConference
Java SE 8 best practices
Java SE 8 best practices
Stephen Colebourne
java programming - applets
java programming - applets
HarshithaAllu
The Java Carputer
The Java Carputer
Simon Ritter
java 8 new features
java 8 new features
Rohit Verma
Java 8 Features
Java 8 Features
Trung Nguyen
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
NewCircle Training
Functional Java 8 - Introduction
Functional Java 8 - Introduction
Łukasz Biały
Automatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to Interfaces
Raffi Khatchadourian
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
DevelopIntelligence
Lambdas & Streams
Lambdas & Streams
C4Media
Java 8 - Features Overview
Java 8 - Features Overview
Sergii Stets
Exception handling
Exception handling
Ravi Kant Sahu
Lambda Expressions in Java 8
Lambda Expressions in Java 8
icarter09
Functional programming with Java 8
Functional programming with Java 8
LivePerson
Java 8 new features
Java 8 new features
Aniket Thakur
What's hot
(20)
Java SE 8 library design
Java SE 8 library design
Apouc 2014-java-8-create-the-future
Apouc 2014-java-8-create-the-future
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Java 8 Features
Java 8 Features
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Java SE 8 best practices
Java SE 8 best practices
java programming - applets
java programming - applets
The Java Carputer
The Java Carputer
java 8 new features
java 8 new features
Java 8 Features
Java 8 Features
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
Functional Java 8 - Introduction
Functional Java 8 - Introduction
Automatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to Interfaces
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Lambdas & Streams
Lambdas & Streams
Java 8 - Features Overview
Java 8 - Features Overview
Exception handling
Exception handling
Lambda Expressions in Java 8
Lambda Expressions in Java 8
Functional programming with Java 8
Functional programming with Java 8
Java 8 new features
Java 8 new features
Similar to JDK8 Lambdas and Streams Making Bulk Operations Simple
What's New in Java 8
What's New in Java 8
javafxpert
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3
Simon Ritter
Lambdas Hands On Lab
Lambdas Hands On Lab
Simon Ritter
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java Platform
JavaDayUA
Lambdas And Streams Hands On Lab
Lambdas And Streams Hands On Lab
Simon Ritter
Open Problems in Automatically Refactoring Legacy Java Software to use New Fe...
Open Problems in Automatically Refactoring Legacy Java Software to use New Fe...
Raffi Khatchadourian
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
JavaDayUA
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Edward Burns
Java 8
Java 8
Sudipta K Paik
JDK8 Streams
JDK8 Streams
Bansilal Haudakari
Java 8 Feature Preview
Java 8 Feature Preview
Jim Bethancourt
Java 8 Overview
Java 8 Overview
Nicola Pedot
Completable future
Completable future
Srinivasan Raghvan
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
AMD Developer Central
Java 8
Java 8
jclingan
What's new in Java 8
What's new in Java 8
jclingan
Core java
Core java
kasaragaddaslide
JDK 10 Java Module System
JDK 10 Java Module System
Wolfgang Weigend
Functional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singh
Harmeet Singh(Taara)
imperative programming language, java, android
imperative programming language, java, android
i i
Similar to JDK8 Lambdas and Streams Making Bulk Operations Simple
(20)
What's New in Java 8
What's New in Java 8
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3
Lambdas Hands On Lab
Lambdas Hands On Lab
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java Platform
Lambdas And Streams Hands On Lab
Lambdas And Streams Hands On Lab
Open Problems in Automatically Refactoring Legacy Java Software to use New Fe...
Open Problems in Automatically Refactoring Legacy Java Software to use New Fe...
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Java 8
Java 8
JDK8 Streams
JDK8 Streams
Java 8 Feature Preview
Java 8 Feature Preview
Java 8 Overview
Java 8 Overview
Completable future
Completable future
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Java 8
Java 8
What's new in Java 8
What's new in Java 8
Core java
Core java
JDK 10 Java Module System
JDK 10 Java Module System
Functional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singh
imperative programming language, java, android
imperative programming language, java, android
More from JAXLondon2014
GridGain 6.0: Open Source In-Memory Computing Platform - Nikita Ivanov
GridGain 6.0: Open Source In-Memory Computing Platform - Nikita Ivanov
JAXLondon2014
Performance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
Performance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
JAXLondon2014
How to randomly access data in close-to-RAM speeds but a lower cost with SSD’...
How to randomly access data in close-to-RAM speeds but a lower cost with SSD’...
JAXLondon2014
Conditional Logging Considered Harmful - Sean Reilly
Conditional Logging Considered Harmful - Sean Reilly
JAXLondon2014
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
JAXLondon2014
API Management - a hands on workshop - Paul Fremantle
API Management - a hands on workshop - Paul Fremantle
JAXLondon2014
'Bootiful' Code with Spring Boot - Josh Long
'Bootiful' Code with Spring Boot - Josh Long
JAXLondon2014
The Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh Long
JAXLondon2014
The Economies of Scaling Software - Josh Long and Abdelmonaim Remani
The Economies of Scaling Software - Josh Long and Abdelmonaim Remani
JAXLondon2014
Dataflow, the Forgotten Way - Russel Winder
Dataflow, the Forgotten Way - Russel Winder
JAXLondon2014
Habits of Highly Effective Technical Teams - Martijn Verburg
Habits of Highly Effective Technical Teams - Martijn Verburg
JAXLondon2014
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
JAXLondon2014
Testing within an Agile Environment - Beyza Sakir and Chris Gollop
Testing within an Agile Environment - Beyza Sakir and Chris Gollop
JAXLondon2014
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
JAXLondon2014
Squeezing Performance of out of In-Memory Data Grids - Fuad Malikov
Squeezing Performance of out of In-Memory Data Grids - Fuad Malikov
JAXLondon2014
Spocktacular Testing - Russel Winder
Spocktacular Testing - Russel Winder
JAXLondon2014
Server Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David Delabassee
JAXLondon2014
Reflection Madness - Dr. Heinz Kabutz
Reflection Madness - Dr. Heinz Kabutz
JAXLondon2014
Rapid Web Application Development with MongoDB and the JVM - Trisha Gee
Rapid Web Application Development with MongoDB and the JVM - Trisha Gee
JAXLondon2014
Pushing Java EE outside of the Enterprise: Home Automation and IoT - David De...
Pushing Java EE outside of the Enterprise: Home Automation and IoT - David De...
JAXLondon2014
More from JAXLondon2014
(20)
GridGain 6.0: Open Source In-Memory Computing Platform - Nikita Ivanov
GridGain 6.0: Open Source In-Memory Computing Platform - Nikita Ivanov
Performance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
Performance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
How to randomly access data in close-to-RAM speeds but a lower cost with SSD’...
How to randomly access data in close-to-RAM speeds but a lower cost with SSD’...
Conditional Logging Considered Harmful - Sean Reilly
Conditional Logging Considered Harmful - Sean Reilly
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
API Management - a hands on workshop - Paul Fremantle
API Management - a hands on workshop - Paul Fremantle
'Bootiful' Code with Spring Boot - Josh Long
'Bootiful' Code with Spring Boot - Josh Long
The Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh Long
The Economies of Scaling Software - Josh Long and Abdelmonaim Remani
The Economies of Scaling Software - Josh Long and Abdelmonaim Remani
Dataflow, the Forgotten Way - Russel Winder
Dataflow, the Forgotten Way - Russel Winder
Habits of Highly Effective Technical Teams - Martijn Verburg
Habits of Highly Effective Technical Teams - Martijn Verburg
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
Testing within an Agile Environment - Beyza Sakir and Chris Gollop
Testing within an Agile Environment - Beyza Sakir and Chris Gollop
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Squeezing Performance of out of In-Memory Data Grids - Fuad Malikov
Squeezing Performance of out of In-Memory Data Grids - Fuad Malikov
Spocktacular Testing - Russel Winder
Spocktacular Testing - Russel Winder
Server Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David Delabassee
Reflection Madness - Dr. Heinz Kabutz
Reflection Madness - Dr. Heinz Kabutz
Rapid Web Application Development with MongoDB and the JVM - Trisha Gee
Rapid Web Application Development with MongoDB and the JVM - Trisha Gee
Pushing Java EE outside of the Enterprise: Home Automation and IoT - David De...
Pushing Java EE outside of the Enterprise: Home Automation and IoT - David De...
Recently uploaded
OSCamp Kubernetes 2024 | SRE Challenges in Monolith to Microservices Shift at...
OSCamp Kubernetes 2024 | SRE Challenges in Monolith to Microservices Shift at...
NETWAYS
SaaStr Workshop Wednesday w: Jason Lemkin, SaaStr
SaaStr Workshop Wednesday w: Jason Lemkin, SaaStr
saastr
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
NETWAYS
Genesis part 2 Isaiah Scudder 04-24-2024.pptx
Genesis part 2 Isaiah Scudder 04-24-2024.pptx
FamilyWorshipCenterD
Philippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.ppt
ssuser319dad
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...
Kayode Fayemi
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
NETWAYS
Open Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdf
Open Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdf
henrik385807
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Hasting Chen
CTAC 2024 Valencia - Sven Zoelle - Most Crucial Invest to Digitalisation_slid...
CTAC 2024 Valencia - Sven Zoelle - Most Crucial Invest to Digitalisation_slid...
henrik385807
call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@
vikas rana
George Lever - eCommerce Day Chile 2024
George Lever - eCommerce Day Chile 2024
eCommerce Institute
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
Basil Achie
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkata
anamikaraghav4
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )
Pooja Nehwal
Motivation and Theory Maslow and Murray pdf
Motivation and Theory Maslow and Murray pdf
akankshagupta7348026
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
eCommerce Institute
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
NETWAYS
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Salam Al-Karadaghi
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
NETWAYS
Recently uploaded
(20)
OSCamp Kubernetes 2024 | SRE Challenges in Monolith to Microservices Shift at...
OSCamp Kubernetes 2024 | SRE Challenges in Monolith to Microservices Shift at...
SaaStr Workshop Wednesday w: Jason Lemkin, SaaStr
SaaStr Workshop Wednesday w: Jason Lemkin, SaaStr
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
Genesis part 2 Isaiah Scudder 04-24-2024.pptx
Genesis part 2 Isaiah Scudder 04-24-2024.pptx
Philippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.ppt
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdf
Open Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdf
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
CTAC 2024 Valencia - Sven Zoelle - Most Crucial Invest to Digitalisation_slid...
CTAC 2024 Valencia - Sven Zoelle - Most Crucial Invest to Digitalisation_slid...
call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@
George Lever - eCommerce Day Chile 2024
George Lever - eCommerce Day Chile 2024
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkata
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )
Motivation and Theory Maslow and Murray pdf
Motivation and Theory Maslow and Murray pdf
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
JDK8 Lambdas and Streams Making Bulk Operations Simple
1.
2.
Lambdas & Streams
In JDK8 Making Bulk Opera/ons Simple Simon Ri6er Head of Java Technology Evangelism Oracle Corp. Twi6er: @speakjava Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
3.
Safe Harbor Statement
The following is intended to outline our general product direcTon. It is intended for informaTon purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or funcTonality, and should not be relied upon in making purchasing decisions. The development, release, and Tming of any features or funcTonality described for Oracle’s products remains at the sole discreTon of Oracle. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 3
4.
java.util.concurrent (jsr166) 1.0
5.0 6 7 8 1996 … 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. java.lang.Thread Fork/Join Framework (jsr166y) Concurrency in Java Project Lambda Phasers, etc (jsr166)
5.
Lambdas In Java
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
6.
The Problem: External
IteraTon List<Student> students = ... double highestScore = 0.0; for (Student s : students) { if (s.getGradYear() == 2011) { if (s.getScore() > highestScore) highestScore = s.score; } } • Our code controls iteraTon • Inherently Copyright © 2014, Oracle and/or its affiliates. All rights reserved. serial: iterate from beginning to end • Not thread-‐safe • Business logic is stateful • Mutable accumulator variable
7.
Internal IteraTon With
Inner Classes • IteraTon handled by the library • Not inherently serial – traversal Copyright © 2014, Oracle and/or its affiliates. All rights reserved. may be done in parallel • Traversal may be done lazily – so one pass, rather than three • Thread safe – client logic is stateless • High barrier to use – SyntacTcally ugly More FuncTonal double highestScore = students .filter(new Predicate<Student>() { public boolean op(Student s) { return s.getGradYear() == 2011; } }) .map(new Mapper<Student,Double>() { public Double extract(Student s) { return s.getScore(); } }) .max();
8.
Internal IteraTon With
Lambdas Copyright © 2014, Oracle and/or its affiliates. All rights reserved. List<Student> students = ... double highestScore = students .filter(Student s -‐> s.getGradYear() == 2011) .map(Student s -‐> s.getScore()) .max(); • More readable • More abstract • Less error-‐prone NOTE: This is not JDK8 code
9.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Lambda Expressions Some Details • Lambda expressions represent anonymous funcTons – Same structure as a method • typed argument list, return type, set of thrown excepTons, and a body – Not associated with a class • We now have parameterised behaviour, not just values double highestScore = students. filter(Student s -‐> s.getGradYear() == 2011). map(Student s -‐> s.getScore()) max(); What How
10.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Lambda Expression Types • Single-‐method interfaces are used extensively in Java – DefiniTon: a func2onal interface is an interface with one abstract method – Func2onal interfaces are idenTfied structurally – The type of a lambda expression will be a func2onal interface • Lambda expressions provide implementaTons of the abstract method interface Comparator<T> { boolean compare(T x, T y); } interface FileFilter { boolean accept(File x); } interface Runnable { void run(); } interface ActionListener { void actionPerformed(…); } interface Callable<T> { T call(); }
11.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Local Variable Capture • Lambda expressions can refer to effec2vely final local variables from the enclosing scope • EffecTvely final: A variable that meets the requirements for final variables (i.e., assigned once), even if not explicitly declared final • Closures on values, not variables void expire(File root, long before) { root.listFiles(File p -‐> p.lastModified() <= before); }
12.
What Does ‘this’
Mean For Lambdas? • ‘this’ refers to the enclosing object, not the lambda itself Copyright © 2014, Oracle and/or its affiliates. All rights reserved. • Think of ‘this’ as a final predefined local • Remember the Lambda is an anonymous func2on – It is not associated with a class – Therefore there can be no ‘this’ for the Lambda
13.
Referencing Instance Variables
Which are not final, or effecTvely final Copyright © 2014, Oracle and/or its affiliates. All rights reserved. class DataProcessor { private int currentValue; public void process() { DataSet myData = myFactory.getDataSet(); dataSet.forEach(d -‐> d.use(currentValue++)); } }
14.
Referencing Instance Variables
The compiler helps us out Copyright © 2014, Oracle and/or its affiliates. All rights reserved. class DataProcessor { private int currentValue; public void process() { DataSet myData = myFactory.getDataSet(); dataSet.forEach(d -‐> d.use(this.currentValue++); } } ‘this’ (which is effecTvely final) inserted by the compiler
15.
static T void
sort(List<T> l, Comparator<? super T> c); List<String> list = getList(); Collections.sort(list, (String x, String y) -‐> x.length() -‐ y.length()); Collections.sort(list, (x, y) -‐> x.length() -‐ y.length()); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Type Inference • The compiler can oien infer parameter types in a lambda expression § Inferrence based on the target funcTonal interface’s method signature • Fully staTcally typed (no dynamic typing sneaking in) – More typing with less typing
16.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Method References • Method references let us reuse a method as a lambda expression FileFilter x = File f -‐> f.canRead(); FileFilter x = File::canRead;
17.
Factory<List<String>> f =
() -‐> return new ArrayList<String>(); Replace with Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Constructor References • Same concept as a method reference – For the constructor Factory<List<String>> f = ArrayList<String>::new;
18.
Library EvoluTon Copyright
© 2014, Oracle and/or its affiliates. All rights reserved.
19.
int heaviestBlueBlock =
blocks .filter(b -‐> b.getColor() == BLUE) .map(Block::getWeight) .reduce(0, Integer::max); Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Library EvoluTon Goal • Requirement: aggregate operaTons on collecTons – New methods required on CollecTons to facilitate this • This is problemaTc – Can’t add new methods to interfaces without modifying all implementaTons – Can’t necessarily find or control all implementaTons
20.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. SoluTon: Default Methods • Specified in the interface • From the caller’s perspecTve, just an ordinary interface method • Provides a default implementaTon • Default only used when implementaTon classes do not provide a body for the extension method • ImplementaTon classes can provide a be6er version, or not interface Collection<E> { default Stream<E> stream() { return StreamSupport.stream(spliterator()); } }
21.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Virtual Extension Methods Stop right there! • Err, isn’t this implemenTng mulTple inheritance for Java? • Yes, but Java already has mulTple inheritance of types • This adds mulTple inheritance of behavior too • But not state, which is where most of the trouble is • Can sTll be a source of complexity • Class implements two interfaces, both of which have default methods • Same signature • How does the compiler differenTate? • StaTc methods also allowed in interfaces in Java SE 8
22.
FuncTonal Interface DefiniTon
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. • Single Abstract Method (SAM) type • A funcTonal interface is an interface that has one abstract method – Represents a single funcTon contract – Doesn’t mean it only has one method • @FunctionalInterface annotaTon – Helps ensure the funcTonal interface contract is honoured – Compiler error if not a SAM
23.
Lambdas In Full
Flow: Streams Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
24.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Aggregate OperaTons • Most business logic is about aggregate operaTons – “Most profitable product by region” – “Group transacTons by currency” • As we have seen, up to now, Java uses external iteraTon – Inherently serial – FrustraTngly imperaTve • Java SE 8’s answer: The Stream API – With help from Lambdas
25.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Stream Overview At The High Level • AbstracTon for specifying aggregate computaTons – Not a data structure – Can be infinite • Simplifies the descripTon of aggregate computaTons – Exposes opportuniTes for opTmisaTon – Fusing, laziness and parallelism
26.
Source Copyright ©
2014, Oracle and/or its affiliates. All rights reserved. Stream Overview • A stream pipeline consists of three types of things – A source – Zero or more intermediate operaTons – A terminal operaTon • Producing a result or a side-‐effect Pipeline int total = transactions.stream() .filter(t -‐> t.getBuyer().getCity().equals(“London”)) .mapToInt(Transaction::getPrice) .sum(); Intermediate operaTon Terminal operaTon
27.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Stream Sources Many Ways To Create • From collecTons and arrays – Collection.stream() – Collection.parallelStream() – Arrays.stream(T array) or Stream.of() • StaTc factories – IntStream.range() – Files.walk() • Roll your own – java.util.Spliterator
28.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Stream Sources Provide • Access to stream elements • DecomposiTon (for parallel operaTons) – Fork-‐join framework • Stream characterisTcs – ORDERED – SORTED – DISTINCT – SIZED – NONNULL – IMMUTABLE – CONCURRENT
29.
Stream Terminal OperaTons
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. • The pipeline is only evaluated when the terminal operaTon is called – All operaTons can execute sequenTally or in parallel – Intermediate operaTons can be merged • Avoiding mulTple redundant passes on data • Short-‐circuit operaTons (e.g. findFirst) • Lazy evaluaTon – Stream characterisTcs help idenTfy opTmisaTons • DISTINT stream passed to distinct() is a no-‐op
30.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Maps and FlatMaps Map Values in a Stream Map FlatMap Input Stream Input Stream 1-‐to-‐1 mapping 1-‐to-‐many mapping Output Stream Output Stream
31.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Optional<T> Reducing NullPointerException Occurrences String direction = gpsData.getPosition().getLatitude().getDirection(); String direction = “UNKNOWN”; if (gpsData != null) { Position p = gpsData.getPosition(); if (p != null) { Latitude latitude = p.getLatitude(); if (latitude != null) direction = latitude.getDirection(); } }
32.
NullPointerException Occurrences Copyright
© 2014, Oracle and/or its affiliates. All rights reserved. Optional<T> Reducing • Indicates that reference may, or may not have a value – Makes developer responsible for checking – A bit like a stream that can only have zero or one elements Optional<GPSData> maybeGPS = Optional.ofNullable(gpsData); maybeGPS.ifPresent(GPSData::printPosition); GPSData gps = maybeGPS.orElse(new GPSData()); maybeGPS.filter(g -‐> g.lastRead() < 2).ifPresent(GPSData.display());
33.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Example 1 Convert words in list to upper case List<String> output = wordList .stream() .map(String::toUpperCase) .collect(Collectors.toList());
34.
Example 1 Convert
words in list to upper case (in parallel) List<String> output = wordList .parallelStream() .map(String::toUpperCase) .collect(Collectors.toList()); Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
35.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Example 2 • BufferedReader has new method – Stream<String> lines() Count lines in a file long count = bufferedReader .lines() .count();
36.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Example 3 Join lines 3-‐4 into a single string String output = bufferedReader .lines() .skip(2) .limit(2) .collect(Collectors.joining());
37.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Example 4 Collect all words in a file into a list List<String> output = reader .lines() .flatMap(line -‐> Stream.of(line.split(REGEXP))) .filter(word -‐> word.length() > 0) .collect(Collectors.toList());
38.
Example 5 List
of unique words in lowercase, sorted by length List<String> output = reader .lines() .flatMap(line -‐> Stream.of(line.split(REGEXP))) .filter(word -‐> word.length() > 0) .map(String::toLowerCase) .distinct() .sorted((x, y) -‐> x.length() -‐ y.length()) .collect(Collectors.toList()); Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
39.
Example 6: Real
World Infinite stream from thermal sensor private int double currentTemperature; ... thermalReader .lines() .mapToDouble(s -‐> Double.parseDouble(s.substring(0, s.length() -‐ 1))) .map(t -‐> ((t – 32) * 5 / 9) .filter(t -‐> t != currentTemperature) .peek(t -‐> listener.ifPresent(l -‐> l.temperatureChanged(t))) .forEach(t -‐> currentTemperature = t); Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
40.
Example 6: Real
World Infinite stream from thermal sensor private int double currentTemperature; ... thermalReader .lines() .mapToDouble(s -‐> Double.parseDouble(s.substring(0, s.length() -‐ ))) .map(t -‐> ((t – 32) * 5 / 9) .filter(t -‐> t != this.currentTemperature) .peek(t -‐> listener.ifPresent(l -‐> l.temperatureChanged(t))) .forEach(t -‐> this.currentTemperature = t); Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
41.
Copyright © 2014,
Oracle and/or its affiliates. All rights reserved. Conclusions • Java needs lambda statements – Significant improvements in exisTng libraries are required • Require a mechanism for interface evoluTon – SoluTon: virtual extension methods • Bulk operaTons on CollecTons – Much simpler with Lambdas • Java SE 8 evolves the language, libraries, and VM together
42.
Simon Ri6er Oracle
CorporarTon Twi6er: @speakjava Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Download now