SlideShare a Scribd company logo
SAILING WITH JAVA 8 STREAMS
ocpjava.wordpress.com
Ganesh Samarthyam
Java
876
…
I am evolving…
Java 8: Latest (red-hot)
Recent addition:
lambdas
8
Greek characters
are scary!
He he, but lambdas
are fun, not scary
Java meets functional
programming (with lambdas)
Introducing our star
feature - lambda
functions
List<String> strings = Arrays.asList("eeny", "meeny", "miny", "mo");
Consumer<String> printString = string -> System.out.println(string);
strings.forEach(printString);
Lambda
functions!
But what are
lambdas?
Lambdas is just a fancy
name for functions
without a name!
Arrays.asList("eeny", "meeny", "miny", “mo”)
.forEach(string -> System.out.println(string));
Internal Iteration
List<String> strings = Arrays.asList("eeny", "meeny", "miny", "mo");
for(String string : strings) {
System.out.println(string);
}
External Iteration
Lambda
expression
You can use lambdas for
some amazing stuff
sediment
pre-
carbon
ultra-filter
post-
carbon
Filtered
water
E.g., you can compose lambda
functions as in pipes-and-filters
$ cat limerick.txt
There was a young lady of Niger
Who smiled as she rode on a tiger.
They returned from the ride
With the lady inside
And a smile on the face of the tiger.
$ cat limerick.txt | tr -cs "[:alpha:]" "n" | awk '{print
length(), $0}' | sort | uniq
1 a
2 as
2 of
2 on
3 And
3 Who
3 she
3 the
3 was
4 They
4 With
4 face
4 from
4 lady
4 ride
4 rode
5 Niger
5 There
5 smile
5 tiger
5 young
6 inside
6 smiled
8 returned
List<String> lines
= Files.readAllLines(Paths.get("./limerick.txt"), Charset.defaultCharset());
	 	 Map<Integer, List<String>> wordGroups
	 	 = lines.stream()
	 .map(line -> line.replaceAll("W", "n").split("n"))
	 .flatMap(Arrays::stream)
	 .sorted()
	 .distinct()
	 .collect(Collectors.groupingBy(String::length));
	 	 wordGroups.forEach( (count, words) -> {
	 	 words.forEach(word -> System.out.printf("%d %s %n", count, word));
	 	 });
1 a
2 as
2 of
2 on
3 And
3 Who
3 she
3 the
3 was
4 They
4 With
4 face
4 from
4 lady
4 ride
4 rode
5 Niger
5 There
5 smile
5 tiger
5 young
6 inside
6 smiled
8 returned
Lambdas & streams help in
productive programming!
public static void main(String []file) throws Exception {
// process each file passed as argument
// try opening the file with FileReader
try (FileReader inputFile = new FileReader(file[0])) {
int ch = 0;
while( (ch = inputFile.read()) != -1) {
// ch is of type int - convert it back to char
System.out.print( (char)ch );
}
}
// try-with-resources will automatically release FileReader object
}
public static void main(String []file) throws Exception {
Files.lines(Paths.get(file[0])).forEach(System.out::println);
}
Existing APIs are enriched with
lambdas and streams support
So, lets get our hands dirty
and start coding
interface LambdaFunction {
void call();
}
class FirstLambda {
public static void main(String []args) {
LambdaFunction lambdaFunction = () -> System.out.println("Hello world");
lambdaFunction.call();
}
}
Functional interface - provides
signature for lambda functions
Lambda function/expression
Call to the lambda
Prints “Hello world” on the console when executed
@FunctionalInterface
interface LambdaFunction {
void call();
}
Functional interface
Abstract method providing the signature of the
lambda function
Annotation to explicitly state that it is a functional
interface
arg -> System.out.println(arg)
System.out::println
Method references - “syntactic sugar” for
lambda functions
They “route” function parameters
Java 8 streams (and parallel streams):
Excellent example of applying functional
programming in practice
But what are streams?
Arrays.stream(Object.class.getMethods())
.map(method -> method.getName())
.distinct()
.forEach(System.out::println);
wait
equals
toString
hashCode
getClass
notify
notifyAll
Method[] objectMethods = Object.class.getMethods();
Stream<Method> objectMethodStream = Arrays.stream(objectMethods);
Stream<String> objectMethodNames
= objectMethodStream.map(method -> method.getName());
Stream<String> uniqueObjectMethodNames = objectMethodNames.distinct();
uniqueObjectMethodNames.forEach(System.out::println);
Arrays.stream(Object.class.getMethods())
.map(method -> method.getName())
.distinct()
.forEach(System.out::println);
Breaking up into separate
(looong) statements for our
understanding
stream pipeline
Stream	
source	
Intermediate	
opera1ons	
Terminal	
opera1on	
stream	
stream	
Examples:	
IntStream.range(),		
Arrays.stream()	
Examples:	
map(),	filter(),		
dis1nct(),	sorted()	
Examples:	
sum(),	collect(),		
forEach(),	reduce()
DoubleStream.	
of(1.0,	4.0,	9.0)		
map(Math::sqrt)		
.peek(System.out::
println)		
Stream		
Source	(with	
elements	1.0,	
4.0,	and	9.0)	
Intermediate	
Opera=on	1	
(maps	to	
element	values	
1.0,	2.0,	and	3.0)	
Intermediate	
Opera=on	2	
(prints	1.0,	2.0,	
and	3.0)	
.sum();		
Terminal	
Opera=on	
(returns	the	
sum	6.0)	
DoubleStream.of(1.0, 4.0, 9.0)
.map(Math::sqrt)
.peek(System.out::println)
.sum();
IntStream.range(1, 6)
You can use range or iterate
factory methods in the
IntStream interface
IntStream.iterate(1, i -> i + 1).limit(5)
1	 	2 	3 	4 	5	
1	 	4 	9 	16 		25	
map(i	->	i	*	i)	
IntStream.range(1, 5).map(i -> i * i).forEach(System.out::println);
Using streams instead of imperative for i = 1 to 5, print i * i
Stream.of (1, 2, 3, 4, 5)
.map(i -> i * i)
.peek(i -> System.out.printf("%d ", i))
.count();
prints: 1 4 9 16 25
stream can be
infinite
IntStream.iterate(0, i -> i + 2).forEach(System.out::println);
This code creates infinite stream of even numbers!
IntStream
.iterate(0, i -> i + 2)
.limit(5)
.forEach(System.out::println);
Using the “limit” function to limit the stream to 5 integers
IntStream chars = "bookkeep".chars();
System.out.println(chars.count());
chars.distinct().sorted().forEach(ch -> System.out.printf("%c ", ch));
Cannot “reuse” a stream; this code
throws IllegalStateException
Streams are lazy!
Files.lines(Paths.get("FileRead.java")).forEach(System.out::println);
This code prints the contents of
the file “FileRead.java” in the
current directory
Pattern.compile(" ").splitAsStream("java 8 streams").forEach(System.out::println);
This code splits the input string “java 8
streams” based on whitespace and hence
prints the strings “java”, “8”, and
“streams” on the console
new Random().ints().limit(5).forEach(System.out::println);
Generates 5 random integers and prints
them on the console
"hello".chars().sorted().forEach(ch -> System.out.printf("%c ", ch));
Extracts characters in the string “hello”,
sorts the chars and prints the chars
Parallel Streams
race conditions
Sailing with Java 8 Streams
deadlocks
Sailing with Java 8 Streams
I really really hate
concurrency problems
Parallel code
Serial code
Sometimes, dreams do come
true even at 86 :-)
So, keep dreaming till you
become 86!
long numOfPrimes = LongStream.rangeClosed(2, 100_000)
.filter(PrimeNumbers::isPrime)
.count();
System.out.println(numOfPrimes);
Prints 9592
2.510 seconds
Parallel code
Serial code
Let’s flip the switch by
calling parallel() function
long numOfPrimes = LongStream.rangeClosed(2, 100_000)
.parallel()
.filter(PrimeNumbers::isPrime)
.count();
System.out.println(numOfPrimes);
Prints 9592
1.235 seconds
Wow! That’s an awesome flip
switch!
Internally, parallel streams make
use of fork-join framework
Sailing with Java 8 Streams
import java.util.Arrays;
class StringConcatenator {
public static String result = "";
public static void concatStr(String str) {
result = result + " " + str;
}
}
class StringSplitAndConcatenate {
public static void main(String []args) {
String words[] = "the quick brown fox jumps over the lazy dog".split(" ");
Arrays.stream(words).forEach(StringConcatenator::concatStr);
System.out.println(StringConcatenator.result);
}
}
Gives wrong results with
with parallel() call
Adapt, learn functional
programming!
❖ Programming examples are
from our book:
❖ Oracle Certified Professional
Java SE 8 Programmer Exam
1Z0-809: A Comprehensive
OCPJP 8 Certification Guide,
S.G. Ganesh, Hari Kiran
Kumar, Tushar Sharma, Apress,
2016.
❖ Website: ocpjava.wordpress.com
Image credits
• http://www.wetplanetwhitewater.com/images/uploads/adam_mills_elliott82.jpg
• http://s.ecrater.com/stores/321182/53e46c705f68d_321182b.jpg
• http://img.viralpatel.net/2014/01/java-lambda-expression.png
• https://i.ytimg.com/vi/3C0R_fEXcYA/maxresdefault.jpg
• http://farm1.static.flickr.com/74/170765090_53762a686c.jpg
• http://www.monazu.com/wp-content/uploads/2012/06/ask-the-right-questions.jpg
• https://s-media-cache-ak0.pinimg.com/736x/43/42/8a/43428ac2c352166374d851e895ed5db1.jpg
• http://cdn.attackofthecute.com/August-17-2011-12-36-23-peekaboo-
kitty-46f32anul-131384-530-410.jpeg
• https://ludchurchmyblog.files.wordpress.com/2010/02/myths-legend-pictures-083.jpg
• http://www.youramazingplaces.com/wp-content/uploads/2013/06/Mauvoisin-Dam-
Switzerland-620x413.jpg
• http://www.welikeviral.com/files/2014/08/Image-914.jpg
• http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef013485f6be4d970c-800wi
• https://qph.fs.quoracdn.net/main-qimg-56547c0506050206b50b80a268bf2a84
• https://i.ytimg.com/vi/kCVsKsgVhBA/maxresdefault.jpg
• http://i.livescience.com/images/i/000/022/395/original/man-dreams-bed.jpg
• https://static-secure.guim.co.uk/sys-images/Guardian/Pix/pictures/2012/11/26/1353952826063/Alarm-
clock-010.jpg
email sgganesh@gmail.com
website www.designsmells.com
twitter @GSamarthyam
linkedin bit.ly/sgganesh
slideshare slideshare.net/sgganesh

More Related Content

PDF
Java Concurrency by Example
PDF
Advanced Debugging Using Java Bytecodes
PDF
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
PDF
Java Class Design
PDF
Core Java - Quiz Questions - Bug Hunt
PPTX
Java concurrency questions and answers
PDF
Design Patterns - Compiler Case Study - Hands-on Examples
PDF
Lambdas and Streams Master Class Part 2
Java Concurrency by Example
Advanced Debugging Using Java Bytecodes
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
Java Class Design
Core Java - Quiz Questions - Bug Hunt
Java concurrency questions and answers
Design Patterns - Compiler Case Study - Hands-on Examples
Lambdas and Streams Master Class Part 2

What's hot (20)

PPT
Java Basics
PPTX
OCJP Samples Questions: Exceptions and assertions
PDF
Java 8 Stream API. A different way to process collections.
PPTX
A topology of memory leaks on the JVM
PPTX
Unit testing concurrent code
PDF
Lambda and Stream Master class - part 1
PPTX
Use of Apache Commons and Utilities
PPTX
An introduction to JVM performance
PPTX
Java byte code in practice
PDF
Java Full Throttle
PPTX
모던자바의 역습
PPTX
Monitoring distributed (micro-)services
KEY
DjangoCon US 2011 - Monkeying around at New Relic
PPTX
Migrating to JUnit 5
ODP
Lambda Chops - Recipes for Simpler, More Expressive Code
PDF
Voxxed Days Vilnius 2015 - Having fun with Javassist
PPTX
The Sincerest Form of Flattery
PDF
Java 5 and 6 New Features
PPTX
Mastering Java Bytecode With ASM - 33rd degree, 2012
PDF
Free your lambdas
Java Basics
OCJP Samples Questions: Exceptions and assertions
Java 8 Stream API. A different way to process collections.
A topology of memory leaks on the JVM
Unit testing concurrent code
Lambda and Stream Master class - part 1
Use of Apache Commons and Utilities
An introduction to JVM performance
Java byte code in practice
Java Full Throttle
모던자바의 역습
Monitoring distributed (micro-)services
DjangoCon US 2011 - Monkeying around at New Relic
Migrating to JUnit 5
Lambda Chops - Recipes for Simpler, More Expressive Code
Voxxed Days Vilnius 2015 - Having fun with Javassist
The Sincerest Form of Flattery
Java 5 and 6 New Features
Mastering Java Bytecode With ASM - 33rd degree, 2012
Free your lambdas
Ad

Viewers also liked (9)

PPTX
OCP Java (OCPJP) 8 Exam Quick Reference Card
PDF
Cracking OCA and OCP Java 8 Exams
PDF
Functional Thinking - Programming with Lambdas in Java 8
PDF
Productive Programming in Java 8 - with Lambdas and Streams
PPTX
55 New Features in Java SE 8
PPTX
New Features in JDK 8
PPTX
Java 8 presentation
PPTX
Java 8 - Features Overview
PPTX
Supercharged java 8 : with cyclops-react
OCP Java (OCPJP) 8 Exam Quick Reference Card
Cracking OCA and OCP Java 8 Exams
Functional Thinking - Programming with Lambdas in Java 8
Productive Programming in Java 8 - with Lambdas and Streams
55 New Features in Java SE 8
New Features in JDK 8
Java 8 presentation
Java 8 - Features Overview
Supercharged java 8 : with cyclops-react
Ad

Similar to Sailing with Java 8 Streams (20)

PDF
Functional Programming in Java 8 - Exploiting Lambdas
PDF
Functional Thinking for Java Developers (presented in Javafest Bengaluru)
PDF
Functional Programming in Java 8 - Lambdas and Streams
PDF
Lambda Functions in Java 8
PDF
Charles Sharp: Java 8 Streams
PPTX
A brief tour of modern Java
PPTX
Java 8 Lambda and Streams
PPTX
Java8 training - Class 1
PPTX
PDF
PPTX
FUNctional Programming in Java 8
PPTX
Lambdas And Streams Hands On Lab, JavaOne 2014
PDF
Java Lambda internals with invoke dynamic
PDF
Lambda.pdf
PPTX
Lambda Expressions in Java 8
PPTX
Java 8
PPTX
New features in jdk8 iti
PPTX
PPTX
A Brief Conceptual Introduction to Functional Java 8 and its API
PPTX
Lambdas and-streams-s ritter-v3
Functional Programming in Java 8 - Exploiting Lambdas
Functional Thinking for Java Developers (presented in Javafest Bengaluru)
Functional Programming in Java 8 - Lambdas and Streams
Lambda Functions in Java 8
Charles Sharp: Java 8 Streams
A brief tour of modern Java
Java 8 Lambda and Streams
Java8 training - Class 1
FUNctional Programming in Java 8
Lambdas And Streams Hands On Lab, JavaOne 2014
Java Lambda internals with invoke dynamic
Lambda.pdf
Lambda Expressions in Java 8
Java 8
New features in jdk8 iti
A Brief Conceptual Introduction to Functional Java 8 and its API
Lambdas and-streams-s ritter-v3

More from Ganesh Samarthyam (20)

PDF
Wonders of the Sea
PDF
Animals - for kids
PDF
Applying Refactoring Tools in Practice
PDF
CFP - 1st Workshop on “AI Meets Blockchain”
PDF
Great Coding Skills Aren't Enough
PDF
College Project - Java Disassembler - Description
PDF
Coding Guidelines - Crafting Clean Code
PDF
Bangalore Container Conference 2017 - Brief Presentation
PDF
Bangalore Container Conference 2017 - Poster
PDF
Software Design in Practice (with Java examples)
PDF
OO Design and Design Patterns in C++
PDF
Bangalore Container Conference 2017 - Sponsorship Deck
PDF
Let's Go: Introduction to Google's Go Programming Language
PPT
Google's Go Programming Language - Introduction
PDF
Java Generics - Quiz Questions
PDF
Java Generics - by Example
PDF
Software Architecture - Quiz Questions
PDF
Docker by Example - Quiz
PDF
Core Java: Best practices and bytecodes quiz
PDF
Java Class Design
Wonders of the Sea
Animals - for kids
Applying Refactoring Tools in Practice
CFP - 1st Workshop on “AI Meets Blockchain”
Great Coding Skills Aren't Enough
College Project - Java Disassembler - Description
Coding Guidelines - Crafting Clean Code
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Poster
Software Design in Practice (with Java examples)
OO Design and Design Patterns in C++
Bangalore Container Conference 2017 - Sponsorship Deck
Let's Go: Introduction to Google's Go Programming Language
Google's Go Programming Language - Introduction
Java Generics - Quiz Questions
Java Generics - by Example
Software Architecture - Quiz Questions
Docker by Example - Quiz
Core Java: Best practices and bytecodes quiz
Java Class Design

Recently uploaded (20)

PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Nekopoi APK 2025 free lastest update
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
AI in Product Development-omnex systems
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
Essential Infomation Tech presentation.pptx
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Transform Your Business with a Software ERP System
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
L1 - Introduction to python Backend.pptx
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Operating system designcfffgfgggggggvggggggggg
Nekopoi APK 2025 free lastest update
Reimagine Home Health with the Power of Agentic AI​
AI in Product Development-omnex systems
Which alternative to Crystal Reports is best for small or large businesses.pdf
Essential Infomation Tech presentation.pptx
PTS Company Brochure 2025 (1).pdf.......
2025 Textile ERP Trends: SAP, Odoo & Oracle
Wondershare Filmora 15 Crack With Activation Key [2025
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
How to Choose the Right IT Partner for Your Business in Malaysia
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
wealthsignaloriginal-com-DS-text-... (1).pdf
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Transform Your Business with a Software ERP System
Softaken Excel to vCard Converter Software.pdf
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Design an Analysis of Algorithms II-SECS-1021-03
L1 - Introduction to python Backend.pptx

Sailing with Java 8 Streams