Submit Search
Upload
Java 8: a New Beginning
•
5 likes
•
4,268 views
Russel Winder
Follow
Slides from my ACCU 2013 session introducing some of the Java 8 features.
Read less
Read more
Technology
News & Politics
Report
Share
Report
Share
1 of 102
Download now
Download to read offline
Recommended
Understanding Java 8 Lambdas and Streams - Part 1 - Lambda Calculus, Lambda...
Understanding Java 8 Lambdas and Streams - Part 1 - Lambda Calculus, Lambda...
Philip Schwarz
JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04
Erik Gur
50 new things we can do with Java 8
50 new things we can do with Java 8
José Paumard
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
José Paumard
What's New in Java 8
What's New in Java 8
javafxpert
Java SE 8 best practices
Java SE 8 best practices
Stephen Colebourne
Closures, the next "Big Thing" in Java: Russel Winder
Closures, the next "Big Thing" in Java: Russel Winder
JAX London
Closures: The Next "Big Thing" In Java
Closures: The Next "Big Thing" In Java
Russel Winder
Recommended
Understanding Java 8 Lambdas and Streams - Part 1 - Lambda Calculus, Lambda...
Understanding Java 8 Lambdas and Streams - Part 1 - Lambda Calculus, Lambda...
Philip Schwarz
JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04
Erik Gur
50 new things we can do with Java 8
50 new things we can do with Java 8
José Paumard
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
José Paumard
What's New in Java 8
What's New in Java 8
javafxpert
Java SE 8 best practices
Java SE 8 best practices
Stephen Colebourne
Closures, the next "Big Thing" in Java: Russel Winder
Closures, the next "Big Thing" in Java: Russel Winder
JAX London
Closures: The Next "Big Thing" In Java
Closures: The Next "Big Thing" In Java
Russel Winder
Java is Dead, Long Live Ceylon, Kotlin, etc
Java is Dead, Long Live Ceylon, Kotlin, etc
Russel Winder
GroovyFX: or how to program JavaFX easily
GroovyFX: or how to program JavaFX easily
Russel Winder
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Russel Winder
Switch to Python 3…now…immediately
Switch to Python 3…now…immediately
Russel Winder
Java is dead, long live Scala Kotlin Ceylon etc.
Java is dead, long live Scala Kotlin Ceylon etc.
Russel Winder
Why Groovy When Java 8 or Scala, or…
Why Groovy When Java 8 or Scala, or…
Russel Winder
GPars Workshop
GPars Workshop
Russel Winder
Testing: Python, Java, Groovy, etc.
Testing: Python, Java, Groovy, etc.
Russel Winder
The Case for Kotlin and Ceylon
The Case for Kotlin and Ceylon
Russel Winder
GPars: Parallelism the Right Way
GPars: Parallelism the Right Way
Russel Winder
On Concurrency and Parallelism in the JVMverse
On Concurrency and Parallelism in the JVMverse
Russel Winder
On the Architectures of Microservices: the next layer
On the Architectures of Microservices: the next layer
Russel Winder
Fast Python? Don't Bother
Fast Python? Don't Bother
Russel Winder
Making Python computations fast
Making Python computations fast
Russel Winder
Tales from the Workshops
Tales from the Workshops
Russel Winder
Making Computations Execute Very Quickly
Making Computations Execute Very Quickly
Russel Winder
GPars Remoting
GPars Remoting
Russel Winder
GPars 2014
GPars 2014
Russel Winder
Spocktacular testing
Spocktacular testing
Russel Winder
Spocktacular Testing
Spocktacular Testing
Russel Winder
Is Groovy static or dynamic
Is Groovy static or dynamic
Russel Winder
Dataflow: the concurrency/parallelism architecture you need
Dataflow: the concurrency/parallelism architecture you need
Russel Winder
More Related Content
Similar to Java 8: a New Beginning
Java is Dead, Long Live Ceylon, Kotlin, etc
Java is Dead, Long Live Ceylon, Kotlin, etc
Russel Winder
GroovyFX: or how to program JavaFX easily
GroovyFX: or how to program JavaFX easily
Russel Winder
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Russel Winder
Switch to Python 3…now…immediately
Switch to Python 3…now…immediately
Russel Winder
Java is dead, long live Scala Kotlin Ceylon etc.
Java is dead, long live Scala Kotlin Ceylon etc.
Russel Winder
Why Groovy When Java 8 or Scala, or…
Why Groovy When Java 8 or Scala, or…
Russel Winder
GPars Workshop
GPars Workshop
Russel Winder
Testing: Python, Java, Groovy, etc.
Testing: Python, Java, Groovy, etc.
Russel Winder
The Case for Kotlin and Ceylon
The Case for Kotlin and Ceylon
Russel Winder
GPars: Parallelism the Right Way
GPars: Parallelism the Right Way
Russel Winder
Similar to Java 8: a New Beginning
(10)
Java is Dead, Long Live Ceylon, Kotlin, etc
Java is Dead, Long Live Ceylon, Kotlin, etc
GroovyFX: or how to program JavaFX easily
GroovyFX: or how to program JavaFX easily
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Switch to Python 3…now…immediately
Switch to Python 3…now…immediately
Java is dead, long live Scala Kotlin Ceylon etc.
Java is dead, long live Scala Kotlin Ceylon etc.
Why Groovy When Java 8 or Scala, or…
Why Groovy When Java 8 or Scala, or…
GPars Workshop
GPars Workshop
Testing: Python, Java, Groovy, etc.
Testing: Python, Java, Groovy, etc.
The Case for Kotlin and Ceylon
The Case for Kotlin and Ceylon
GPars: Parallelism the Right Way
GPars: Parallelism the Right Way
More from Russel Winder
On Concurrency and Parallelism in the JVMverse
On Concurrency and Parallelism in the JVMverse
Russel Winder
On the Architectures of Microservices: the next layer
On the Architectures of Microservices: the next layer
Russel Winder
Fast Python? Don't Bother
Fast Python? Don't Bother
Russel Winder
Making Python computations fast
Making Python computations fast
Russel Winder
Tales from the Workshops
Tales from the Workshops
Russel Winder
Making Computations Execute Very Quickly
Making Computations Execute Very Quickly
Russel Winder
GPars Remoting
GPars Remoting
Russel Winder
GPars 2014
GPars 2014
Russel Winder
Spocktacular testing
Spocktacular testing
Russel Winder
Spocktacular Testing
Spocktacular Testing
Russel Winder
Is Groovy static or dynamic
Is Groovy static or dynamic
Russel Winder
Dataflow: the concurrency/parallelism architecture you need
Dataflow: the concurrency/parallelism architecture you need
Russel Winder
Are Go and D threats to Python
Are Go and D threats to Python
Russel Winder
Is Groovy as fast as Java
Is Groovy as fast as Java
Russel Winder
Who needs C++ when you have D and Go
Who needs C++ when you have D and Go
Russel Winder
Why Go is an important programming language
Why Go is an important programming language
Russel Winder
GPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for Java
Russel Winder
Given Groovy Who Needs Java
Given Groovy Who Needs Java
Russel Winder
It's All About Processes Communicating
It's All About Processes Communicating
Russel Winder
GPars
GPars
Russel Winder
More from Russel Winder
(20)
On Concurrency and Parallelism in the JVMverse
On Concurrency and Parallelism in the JVMverse
On the Architectures of Microservices: the next layer
On the Architectures of Microservices: the next layer
Fast Python? Don't Bother
Fast Python? Don't Bother
Making Python computations fast
Making Python computations fast
Tales from the Workshops
Tales from the Workshops
Making Computations Execute Very Quickly
Making Computations Execute Very Quickly
GPars Remoting
GPars Remoting
GPars 2014
GPars 2014
Spocktacular testing
Spocktacular testing
Spocktacular Testing
Spocktacular Testing
Is Groovy static or dynamic
Is Groovy static or dynamic
Dataflow: the concurrency/parallelism architecture you need
Dataflow: the concurrency/parallelism architecture you need
Are Go and D threats to Python
Are Go and D threats to Python
Is Groovy as fast as Java
Is Groovy as fast as Java
Who needs C++ when you have D and Go
Who needs C++ when you have D and Go
Why Go is an important programming language
Why Go is an important programming language
GPars: Groovy Parallelism for Java
GPars: Groovy Parallelism for Java
Given Groovy Who Needs Java
Given Groovy Who Needs Java
It's All About Processes Communicating
It's All About Processes Communicating
GPars
GPars
Recently uploaded
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
BookNet Canada
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
Rizwan Syed
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Lorenzo Miniero
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
BookNet Canada
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
The Digital Insurer
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
Dubai Multi Commodity Centre
costume and set research powerpoint presentation
costume and set research powerpoint presentation
phoebematthew05
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Fwdays
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
carlostorres15106
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
gvaughan
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
jimielynbastida
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
Softradix Technologies
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
UiPathCommunity
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
Alex Barbosa Coqueiro
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
Deakin University
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Scott Keck-Warren
Recently uploaded
(20)
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
costume and set research powerpoint presentation
costume and set research powerpoint presentation
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Java 8: a New Beginning
1.
Java 8
A New Beginning Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk Copyright © 2013 Russel Winder 1
2.
Aims, Goals and
Objectives ● Investigate why Java 8 is the greatest revolution in Java since 1995. ● Investigate why some idioms from Java 0–7 lead to bad code in a post-Java 7 world. ● Show what some of the idioms of Java 8 and beyond are likely to be. Copyright © 2013 Russel Winder 2
3.
Structure
A Beginning A Middle An End Copyright © 2013 Russel Winder 3
4.
Interstitial Advertisement
? Copyright © 2013 Russel Winder 4
5.
A Beginning Copyright ©
2013 Russel Winder 5
6.
Many people are
still using Java 1.4. Copyright © 2013 Russel Winder 6
7.
They see no
reason to move to any later version of Java: no real benefit, for too much pain. Copyright © 2013 Russel Winder 7
8.
Java 5 is
a barrier too far for them. Copyright © 2013 Russel Winder 8
9.
The Java 7
→ Java 8 change is an even more disruptive change. Copyright © 2013 Russel Winder 9
10.
This possibly means
Java is now a legacy language? Copyright © 2013 Russel Winder 10
11.
No, it's an
opportunity to stop programming using 1970s techniques and start using 1930s ones. Copyright © 2013 Russel Winder 11
12.
Alonzo Church
Stephen Kleene J B Rosser Alan Turing Copyright © 2013 Russel Winder 12
13.
Another Beginning Copyright ©
2013 Russel Winder 13
14.
What's New in
Java 8 ● Simon Ritter gave a talk about 55 things that are new in Java 8 at DevoxxUK 2013: http://www.devoxx.com/display/UK13/55+New+features+in+Java+SE+8 ● The video will appear on Parleys once encoded. Copyright © 2013 Russel Winder 14
15.
What's (Quite) Interesting
in Java 8? ● G1 garbage collector. ● Lambda expressions. ● Nashorn. ● Enhanced collections. ● JavaFX. Copyright © 2013 Russel Winder 15
16.
G1 garbage collector
is now the standard: No more PermGen. Copyright © 2013 Russel Winder 16
17.
Nashorn comes as
standard: Server-side JavaScript without Rhino. Copyright © 2013 Russel Winder 17
18.
JavaFX in the
distribution and the classpath: You probably want to use GroovyFX though. Copyright © 2013 Russel Winder 18
19.
Lambda expressions, and
associated collections enhancements. Copyright © 2013 Russel Winder 19
20.
Closures Copyright © 2013
Russel Winder 20
21.
A closure is
a function with an associated environment containing values for all the free variables in the function. Copyright © 2013 Russel Winder 21
22.
A Function
Integer f(final Integer x) { return x * y ; } Free variable. Copyright © 2013 Russel Winder 22
23.
A closure should
be referentially transparent. Whenever function f is evaluated on the same value, a say, then the same value is returned. f(a) = b Copyright © 2013 Russel Winder 23
24.
Java has had
things (sort of) like this since (almost) the beginning… Copyright © 2013 Russel Winder 24
25.
A closure can
be realized as an instance of a class with a single method and single assignment fields. Copyright © 2013 Russel Winder 25
26.
public class ClosureClass
{ private final Integer multiplier; public ClosureClass(final Integer m) { multiplier = m; } public Integer call(final Integer i) { return multiplier * i; } } No free variables in call. Copyright © 2013 Russel Winder 26
27.
final ClosureClass multiplyBy5
= new ClosureClass(5); multiplyBy5.call(4) Copyright © 2013 Russel Winder 27
28.
Alternatively, using anonymous
classes… Copyright © 2013 Russel Winder 28
29.
public interface ClosureInterface<T>
{ T call(T t); } final ClosureInterface<Integer> multiplyBy5 = new ClosureInterface<Integer>() { public Integer call(final Integer i) { return 5 * i; } }; multiplyBy5.call(4) Copyright © 2013 Russel Winder 29
30.
Java has accreted
a reputation for being verbose. Copyright © 2013 Russel Winder 30
31.
Unlike Groovy, Scala,
Kotlin, Ceylon, etc. Copyright © 2013 Russel Winder 31
32.
Or Python, D,
C++ (!), etc. Copyright © 2013 Russel Winder 32
33.
final multiplyBy5 =
{i -> 5 * i} final multiplyBy5 = {5 * it} multiplyBy5(4) multiplyBy5.call(4) Copyright © 2013 Russel Winder 33
34.
def multiplyBy5(i: Int):
Int = 5 * i multiplyBy5(4) Copyright © 2013 Russel Winder 34
35.
How to do
all this stuff in Java whilst keeping backward compatibility? Copyright © 2013 Russel Winder 35
36.
Copyright © 2013
Russel Winder 36
37.
Do not use
anonymous classes. Copyright © 2013 Russel Winder 37
38.
Copyright © 2013
Russel Winder 38
39.
We have method
handles… Copyright © 2013 Russel Winder 39
40.
…and invokedynamic. Copyright ©
2013 Russel Winder 40
41.
public interface ClosureInterface<T>
{ T call(T t); } final ClosureInterface<Integer> multiplyBy5 = i -> 5 * i; multiplyBy5.call(4) Copyright © 2013 Russel Winder 41
42.
Lambda Expressions
● Functional interfaces – previously known as single abstract method (SAM) types. ● Call site type inference. ● No classes: JVM byte code synthesis, method handles and invokedynamic. Copyright © 2013 Russel Winder 42
43.
Nothing much revolutionary
here, just a bit of syntactic sugar… Copyright © 2013 Russel Winder 43
44.
…true (sort of),
but that isn't all there is… Copyright © 2013 Russel Winder 44
45.
A Middle Copyright ©
2013 Russel Winder 45
46.
It all about
where the iteration is. Copyright © 2013 Russel Winder 46
47.
Explicit iteration
vs. Implicit iteration Copyright © 2013 Russel Winder 47
48.
Work with a
(trivial) example: Copyright © 2013 Russel Winder 48
49.
Calculate the sum
of the squares of the numbers between 0 and 100 that are divisible by 7. Copyright © 2013 Russel Winder 49
50.
int sum =
0; for (int i = 0; i < 100; ++i) { if (i % 7 == 0) { sum += i * i; } } Copyright © 2013 Russel Winder 50
51.
(for (i <-
0 until 100; if i % 7 == 0) yield i * i).sum Copyright © 2013 Russel Winder 51
52.
sum({for (i in
0..100) if (i % 7 == 0) i * i}) Copyright © 2013 Russel Winder 52
53.
sum(i * i
for i in range(100) if i % 7 == 0) Copyright © 2013 Russel Winder 53
54.
(0 until 100).filter(i
=> i %7 == 0).map(i => i * i).sum Copyright © 2013 Russel Winder 54
55.
0.rangeTo(100).iterator().filter{i -> i
% 7 == 0}.map{i -> i * i}.reduce{a, b -> a + b} Copyright © 2013 Russel Winder 55
56.
sum((0..100).filter((Integer i) =>
i % 7 == 0).map((Integer i) => i * i)) Copyright © 2013 Russel Winder 56
57.
(0..100).findAll{i -> i
% 7 == 0}.collect{i -> i * i}.sum() Copyright © 2013 Russel Winder 57
58.
(0..100).findAll{it % 7
== 0}.collect{it * it}.sum() Copyright © 2013 Russel Winder 58
59.
Streams.intRange(0, 100).filter(i ->
i % 7 == 0).map(i -> i * i).sum() Copyright © 2013 Russel Winder 59
60.
Higher Order Functions Copyright
© 2013 Russel Winder 60
61.
Functions that take
functions as parameters and/or return functions as result. Copyright © 2013 Russel Winder 61
62.
Some may be
thinking: Why do I give a f###? Copyright © 2013 Russel Winder 62
63.
After all nothing
good has happened in Java since Java 1.4.2. Copyright © 2013 Russel Winder 63
64.
Copyright © 2013
Russel Winder 64
65.
Because all computers
are now parallel computers. Copyright © 2013 Russel Winder 65
66.
Copyright © 2013
Russel Winder 66
67.
We have to
move to an attitude where we assume our software is not uniprocessor. Copyright © 2013 Russel Winder 67
68.
We have to
actually do object-oriented and functional programming. Copyright © 2013 Russel Winder 68
69.
Instead of just
saying we write code using Java, C++, etc. and so must be doing object-oriented programming. Copyright © 2013 Russel Winder 69
70.
From earlier… Streams.intRange(0, 100).filter(i
-> i % 7 == 0).map(i -> i * i).sum() Copyright © 2013 Russel Winder 70
71.
Streams.intRange(0, 100).parallel().filter(i ->
i % 7 == 0).map(i -> i * i).sum() Copyright © 2013 Russel Winder 71
72.
Data parallelism with
a single method call. Copyright © 2013 Russel Winder 72
73.
GParsPool.withPool {
(0..100).findAllParallel{it % 7 == 0}.collectParallel{it * it}.sum() } Copyright © 2013 Russel Winder 73
74.
GParsPool.withPool {
(0..100).parallel.filter{it % 7 == 0}.map{it * it}.sum() } Copyright © 2013 Russel Winder 74
75.
def value =
(0..100) ParallelEnhancer.enhanceInstance(value) value = value.parallel.filter{it % 7 == 0}.map{it * it}.sum() Copyright © 2013 Russel Winder 75
76.
def value =
(0..100) ParallelEnhancer.enhanceInstance(value) value = value.findAllParallel{it % 7 == 0}.collectParallel{it * it}.sum() Copyright © 2013 Russel Winder 76
77.
GPars and Groovy
give you Java 8 style approach and parallelism today for Java with JDK6 or JDK7. Copyright © 2013 Russel Winder 77
78.
Guava, TotallyLazy, and
FunctionalJava can be used today to practice the functional approach using Java. Copyright © 2013 Russel Winder 78
79.
Using Scala is
an option for doing functional programming*. Copyright © 2013 Russel Winder *And just ignore Java altogether. 79
80.
(0 until 100).par.filter(i
=> i %7 == 0).map(i => i * i).sum Copyright © 2013 Russel Winder 80
81.
Or just install
the JDK8 Lambda release. Copyright © 2013 Russel Winder 81
82.
Copyright © 2013
Russel Winder 82
83.
Copyright © 2013
Russel Winder 83
84.
What is the
Value of ? Easy, it's known exactly. It's . Obviously. Copyright © 2013 Russel Winder 84
85.
It's simples
Александр Орлов 2009 Copyright © 2013 Russel Winder 85
86.
Approximating
● What is it's value represented as a floating point number? ● We can only obtain an approximation. ● A plethora of possible algorithms to choose from, a popular one is to employ the following integral equation. 1 1 =∫0 dx 4 1x 2 Copyright © 2013 Russel Winder 86
87.
One Possible Algorithm
● Use quadrature to estimate the value of the integral – which is the area under the curve. 4 n 1 = ∑i=1 n i−0.5 2 Embarrassingly 1 parallel. n With n = 3 not much to do, but potentially lots of error. Use n = 107 or n = 109? Copyright © 2013 Russel Winder 87
88.
Because addition is
commutative and associative, expression can be decomposed into sums of partial sums. Copyright © 2013 Russel Winder 88
89.
a+b+c+d+e+f
= (a+b)+(c+d)+(e+f) Copyright © 2013 Russel Winder 89
90.
Scatter – Gather
map reduce Copyright © 2013 Russel Winder 90
91.
Code! Copyright © 2013
Russel Winder 91
92.
An End Copyright ©
2013 Russel Winder 92
93.
Java is about
to get the functional programming approach. Copyright © 2013 Russel Winder 93
94.
Scala, Groovy, Kotlin,
Ceylon, Python, D, C++, etc. already have object-oriented and functional*. * Well Scala has. Copyright © 2013 Russel Winder 94
95.
It's all about
how your data evolves. It's not about the flow of control. Copyright © 2013 Russel Winder 95
96.
Closures the next
“big thing” in Java? Copyright © 2013 Russel Winder 96
97.
Yes*.
*But will everyone ignore it? Copyright © 2013 Russel Winder 97
98.
No. Copyright © 2013
Russel Winder 98
99.
It is not
the lambda expressions in Java 8 that is the disruptive revolution. It's the change to the Java library that is. It's all about those default methods*. * Aka defender methods, virtual extension methods. Copyright © 2013 Russel Winder 99
100.
Interstitial Advertisement
? Copyright © 2013 Russel Winder 100
101.
The End Copyright ©
2013 Russel Winder 101
102.
Java 8
A New Beginning Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk/ Copyright © 2013 Russel Winder 102
Download now