SlideShare a Scribd company logo
1 of 42
Download to read offline
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.
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
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)
Lambdas 
In 
Java 
Copyright 
© 
2014, 
Oracle 
and/or 
its 
affiliates. 
All 
rights 
reserved.
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
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();
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
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
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(); 
}
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); 
}
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
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++)); 
} 
}
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
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
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;
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;
Library 
EvoluTon 
Copyright 
© 
2014, 
Oracle 
and/or 
its 
affiliates. 
All 
rights 
reserved.
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
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()); 
} 
}
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
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
Lambdas 
In 
Full 
Flow: 
Streams 
Copyright 
© 
2014, 
Oracle 
and/or 
its 
affiliates. 
All 
rights 
reserved.
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
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
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
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
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
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
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
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(); 
} 
}
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());
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());
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.
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();
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());
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());
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.
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.
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.
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
Simon 
Ri6er 
Oracle 
CorporarTon 
Twi6er: 
@speakjava 
Copyright 
© 
2014, 
Oracle 
and/or 
its 
affiliates. 
All 
rights 
reserved.

More Related Content

What's hot

Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsIntroduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsEmiel Paasschens
 
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...jaxLondonConference
 
java programming - applets
java programming - appletsjava programming - applets
java programming - appletsHarshithaAllu
 
java 8 new features
java 8 new features java 8 new features
java 8 new features Rohit Verma
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsNewCircle Training
 
Functional Java 8 - Introduction
Functional Java 8 - IntroductionFunctional 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 InterfacesAutomatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to InterfacesRaffi Khatchadourian
 
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)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 & StreamsLambdas & Streams
Lambdas & StreamsC4Media
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features OverviewSergii Stets
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8icarter09
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 

What's hot (20)

Java SE 8 library design
Java SE 8 library designJava SE 8 library design
Java SE 8 library design
 
Apouc 2014-java-8-create-the-future
Apouc 2014-java-8-create-the-futureApouc 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 StreamsIntroduction 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 FeaturesJava 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...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 practicesJava SE 8 best practices
Java SE 8 best practices
 
java programming - applets
java programming - appletsjava programming - applets
java programming - applets
 
The Java Carputer
The Java CarputerThe Java Carputer
The Java Carputer
 
java 8 new features
java 8 new features java 8 new features
java 8 new features
 
Java 8 Features
Java 8 FeaturesJava 8 Features
Java 8 Features
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
 
Functional Java 8 - Introduction
Functional Java 8 - IntroductionFunctional Java 8 - Introduction
Functional Java 8 - Introduction
 
Automatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to InterfacesAutomatic 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)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 & StreamsLambdas & Streams
Lambdas & Streams
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
 
Exception handling
Exception handlingException handling
Exception handling
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Java 8 new features
Java 8 new featuresJava 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 8What's New in Java 8
What's New in Java 8javafxpert
 
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3Simon Ritter
 
Lambdas Hands On Lab
Lambdas Hands On LabLambdas Hands On Lab
Lambdas Hands On LabSimon Ritter
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJavaDayUA
 
Lambdas And Streams Hands On Lab
Lambdas And Streams Hands On LabLambdas And Streams Hands On Lab
Lambdas And Streams Hands On LabSimon 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...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 ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureJavaDayUA
 
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute InfodeckServlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute InfodeckEdward Burns
 
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...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
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8jclingan
 
Functional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singhFunctional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singhHarmeet Singh(Taara)
 
imperative programming language, java, android
imperative programming language, java, androidimperative programming language, java, android
imperative programming language, java, androidi i
 

Similar to JDK8 Lambdas and Streams Making Bulk Operations Simple (20)

What's New in Java 8
What's New in Java 8What's New in Java 8
What's New in Java 8
 
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3
 
Lambdas Hands On Lab
Lambdas Hands On LabLambdas Hands On Lab
Lambdas Hands On Lab
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: 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 LabLambdas 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...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 ArchitectureInteractive 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 InfodeckServlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
 
Java 8
Java 8Java 8
Java 8
 
JDK8 Streams
JDK8 StreamsJDK8 Streams
JDK8 Streams
 
Java 8 Feature Preview
Java 8 Feature PreviewJava 8 Feature Preview
Java 8 Feature Preview
 
Java 8 Overview
Java 8 OverviewJava 8 Overview
Java 8 Overview
 
Completable future
Completable futureCompletable 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 ...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 8Java 8
Java 8
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8
 
Core java
Core javaCore java
Core java
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
Functional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singhFunctional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singh
 
imperative programming language, java, android
imperative programming language, java, androidimperative 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 IvanovGridGain 6.0: Open Source In-Memory Computing Platform - Nikita Ivanov
GridGain 6.0: Open Source In-Memory Computing Platform - Nikita IvanovJAXLondon2014
 
Performance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
Performance Metrics for your Delivery Pipeline - Wolfgang GottesheimPerformance Metrics for your Delivery Pipeline - Wolfgang Gottesheim
Performance Metrics for your Delivery Pipeline - Wolfgang GottesheimJAXLondon2014
 
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’...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 ReillyConditional Logging Considered Harmful - Sean Reilly
Conditional Logging Considered Harmful - Sean ReillyJAXLondon2014
 
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim RemaniFinding your Way in the Midst of the NoSQL Haze - Abdelmonaim Remani
Finding your Way in the Midst of the NoSQL Haze - Abdelmonaim RemaniJAXLondon2014
 
API Management - a hands on workshop - Paul Fremantle
API Management - a hands on workshop - Paul FremantleAPI Management - a hands on workshop - Paul Fremantle
API Management - a hands on workshop - Paul FremantleJAXLondon2014
 
'Bootiful' Code with Spring Boot - Josh Long
'Bootiful' Code with Spring Boot - Josh Long'Bootiful' Code with Spring Boot - Josh Long
'Bootiful' Code with Spring Boot - Josh LongJAXLondon2014
 
The Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh LongThe Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh LongJAXLondon2014
 
The Economies of Scaling Software - Josh Long and Abdelmonaim Remani
The Economies of Scaling Software - Josh Long and Abdelmonaim RemaniThe Economies of Scaling Software - Josh Long and Abdelmonaim Remani
The Economies of Scaling Software - Josh Long and Abdelmonaim RemaniJAXLondon2014
 
Dataflow, the Forgotten Way - Russel Winder
Dataflow, the Forgotten Way - Russel WinderDataflow, the Forgotten Way - Russel Winder
Dataflow, the Forgotten Way - Russel WinderJAXLondon2014
 
Habits of Highly Effective Technical Teams - Martijn Verburg
Habits of Highly Effective Technical Teams - Martijn VerburgHabits of Highly Effective Technical Teams - Martijn Verburg
Habits of Highly Effective Technical Teams - Martijn VerburgJAXLondon2014
 
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
The Lazy Developer's Guide to Cloud Foundry - Holly CumminsThe Lazy Developer's Guide to Cloud Foundry - Holly Cummins
The Lazy Developer's Guide to Cloud Foundry - Holly CumminsJAXLondon2014
 
Testing within an Agile Environment - Beyza Sakir and Chris Gollop
Testing within an Agile Environment - Beyza Sakir and Chris GollopTesting within an Agile Environment - Beyza Sakir and Chris Gollop
Testing within an Agile Environment - Beyza Sakir and Chris GollopJAXLondon2014
 
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 ...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 MalikovSqueezing Performance of out of In-Memory Data Grids - Fuad Malikov
Squeezing Performance of out of In-Memory Data Grids - Fuad MalikovJAXLondon2014
 
Spocktacular Testing - Russel Winder
Spocktacular Testing - Russel WinderSpocktacular Testing - Russel Winder
Spocktacular Testing - Russel WinderJAXLondon2014
 
Server Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David DelabasseeServer Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David DelabasseeJAXLondon2014
 
Reflection Madness - Dr. Heinz Kabutz
Reflection Madness - Dr. Heinz KabutzReflection Madness - Dr. Heinz Kabutz
Reflection Madness - Dr. Heinz KabutzJAXLondon2014
 
Rapid Web Application Development with MongoDB and the JVM - Trisha Gee
Rapid Web Application Development with MongoDB and the JVM - Trisha GeeRapid Web Application Development with MongoDB and the JVM - Trisha Gee
Rapid Web Application Development with MongoDB and the JVM - Trisha GeeJAXLondon2014
 
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...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 IvanovGridGain 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 GottesheimPerformance 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’...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 ReillyConditional 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 RemaniFinding 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 FremantleAPI 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'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 LongThe 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 RemaniThe 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 WinderDataflow, 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 VerburgHabits 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 CumminsThe 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 GollopTesting 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 ...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 MalikovSqueezing 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 WinderSpocktacular Testing - Russel Winder
Spocktacular Testing - Russel Winder
 
Server Side JavaScript on the Java Platform - David Delabassee
Server Side JavaScript on the Java Platform - David DelabasseeServer 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 KabutzReflection 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 GeeRapid 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...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...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, SaaStrSaaStr Workshop Wednesday w: Jason Lemkin, SaaStr
SaaStr Workshop Wednesday w: Jason Lemkin, SaaStrsaastr
 
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...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.pptxGenesis part 2 Isaiah Scudder 04-24-2024.pptx
Genesis part 2 Isaiah Scudder 04-24-2024.pptxFamilyWorshipCenterD
 
Philippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.pptPhilippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.pptssuser319dad
 
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...
Governance and Nation-Building in Nigeria: Some Reflections on Options for Po...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 ...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.pdfOpen Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdf
Open Source Strategy in Logistics 2015_Henrik Hankedvz-d-nl-log-conference.pdfhenrik385807
 
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...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...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@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 2024George Lever -  eCommerce Day Chile 2024
George Lever - eCommerce Day Chile 2024eCommerce Institute
 
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
LANDMARKS  AND MONUMENTS IN NIGERIA.pptxLANDMARKS  AND MONUMENTS IN NIGERIA.pptx
LANDMARKS AND MONUMENTS IN NIGERIA.pptxBasil Achie
 
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Vaishnavi 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Vaishnavi 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Vaishnavi 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )
WhatsApp 📞 9892124323 ✅Call Girls In Juhu ( Mumbai )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 pdfMotivation and Theory Maslow and Murray pdf
Motivation and Theory Maslow and Murray pdfakankshagupta7348026
 
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024
Andrés Ramírez Gossler, Facundo Schinnea - eCommerce Day Chile 2024eCommerce 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...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) ...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 ...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...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, SaaStrSaaStr 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...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.pptxGenesis 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.pptPhilippine 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...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 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.pdfOpen 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)...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...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@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 2024George Lever -  eCommerce Day Chile 2024
George Lever - eCommerce Day Chile 2024
 
LANDMARKS AND MONUMENTS IN NIGERIA.pptx
LANDMARKS  AND MONUMENTS IN NIGERIA.pptxLANDMARKS  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 KolkataRussian 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 )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 pdfMotivation 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 2024André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...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) ...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 ...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.