java 8: a new beginning
DESCRIPTION
Slides from my ACCU 2013 session introducing some of the Java 8 features.TRANSCRIPT
![Page 1: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/1.jpg)
Copyright © 2013 Russel Winder 1
Java 8A New Beginning
Russel Winder
email: [email protected]: [email protected]
twitter: @russel_winderWeb: http://www.russel.org.uk
![Page 2: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/2.jpg)
Copyright © 2013 Russel Winder 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.
![Page 3: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/3.jpg)
Copyright © 2013 Russel Winder 3
Structure
A Beginning
A Middle
An End
![Page 4: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/4.jpg)
Copyright © 2013 Russel Winder 4
Interstitial Advertisement
?
![Page 5: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/5.jpg)
Copyright © 2013 Russel Winder 5
A Beginning
![Page 6: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/6.jpg)
Copyright © 2013 Russel Winder 6
Many people are still using Java 1.4.
![Page 7: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/7.jpg)
Copyright © 2013 Russel Winder 7
They see no reason to move to anylater version of Java:
no real benefit, for too much pain.
![Page 8: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/8.jpg)
Copyright © 2013 Russel Winder 8
Java 5 is a barrier too far for them.
![Page 9: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/9.jpg)
Copyright © 2013 Russel Winder 9
The Java 7 Java 8 change→is an even more disruptive change.
![Page 10: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/10.jpg)
Copyright © 2013 Russel Winder 10
This possibly means Javais now a legacy language?
![Page 11: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/11.jpg)
Copyright © 2013 Russel Winder 11
No, it's an opportunity to stopprogramming using 1970s techniques
and start using 1930s ones.
![Page 12: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/12.jpg)
Copyright © 2013 Russel Winder 12
Alonzo ChurchStephen Kleene
J B RosserAlan Turing
![Page 13: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/13.jpg)
Copyright © 2013 Russel Winder 13
Another Beginning
![Page 14: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/14.jpg)
Copyright © 2013 Russel Winder 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.
![Page 15: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/15.jpg)
Copyright © 2013 Russel Winder 15
What's (Quite) Interesting in Java 8?
● G1 garbage collector.● Nashorn.● JavaFX.
● Lambda expressions.● Enhanced collections.
![Page 16: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/16.jpg)
Copyright © 2013 Russel Winder 16
G1 garbage collector is now the standard:
No more PermGen.
![Page 17: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/17.jpg)
Copyright © 2013 Russel Winder 17
Nashorn comes as standard:
Server-side JavaScript without Rhino.
![Page 18: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/18.jpg)
Copyright © 2013 Russel Winder 18
JavaFX in the distribution and the classpath:
You probably want to use GroovyFX though.
![Page 19: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/19.jpg)
Copyright © 2013 Russel Winder 19
Lambda expressions, and associatedcollections enhancements.
![Page 20: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/20.jpg)
Copyright © 2013 Russel Winder 20
Closures
![Page 21: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/21.jpg)
Copyright © 2013 Russel Winder 21
A closure is a function with an associated environment containing values for all the free
variables in the function.
![Page 22: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/22.jpg)
Copyright © 2013 Russel Winder 22
Integer f(final Integer x) { return x * y ;}
Free variable.
A Function
![Page 23: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/23.jpg)
Copyright © 2013 Russel Winder 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
![Page 24: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/24.jpg)
Copyright © 2013 Russel Winder 24
Java has had things (sort of) like thissince (almost) the beginning…
![Page 25: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/25.jpg)
Copyright © 2013 Russel Winder 25
A closure can be realized as an instance ofa class with a single method and
single assignment fields.
![Page 26: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/26.jpg)
Copyright © 2013 Russel Winder 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.
![Page 27: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/27.jpg)
Copyright © 2013 Russel Winder 27
final ClosureClass multiplyBy5 = new ClosureClass(5);
multiplyBy5.call(4)
![Page 28: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/28.jpg)
Copyright © 2013 Russel Winder 28
Alternatively, using anonymous classes…
![Page 29: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/29.jpg)
Copyright © 2013 Russel Winder 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)
![Page 30: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/30.jpg)
Copyright © 2013 Russel Winder 30
Java has accreted a reputation for being verbose.
![Page 31: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/31.jpg)
Copyright © 2013 Russel Winder 31
Unlike Groovy, Scala, Kotlin, Ceylon, etc.
![Page 32: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/32.jpg)
Copyright © 2013 Russel Winder 32
Or Python, D, C++ (!), etc.
![Page 33: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/33.jpg)
Copyright © 2013 Russel Winder 33
final multiplyBy5 = {5 * it}
multiplyBy5(4)
multiplyBy5.call(4)
final multiplyBy5 = {i -> 5 * i}
![Page 34: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/34.jpg)
Copyright © 2013 Russel Winder 34
def multiplyBy5(i: Int): Int = 5 * i
multiplyBy5(4)
![Page 35: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/35.jpg)
Copyright © 2013 Russel Winder 35
How to do all this stuff in Java whilstkeeping backward compatibility?
![Page 36: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/36.jpg)
Copyright © 2013 Russel Winder 36
![Page 37: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/37.jpg)
Copyright © 2013 Russel Winder 37
Do not use anonymous classes.
![Page 38: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/38.jpg)
Copyright © 2013 Russel Winder 38
![Page 39: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/39.jpg)
Copyright © 2013 Russel Winder 39
We have method handles…
![Page 40: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/40.jpg)
Copyright © 2013 Russel Winder 40
…and invokedynamic.
![Page 41: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/41.jpg)
Copyright © 2013 Russel Winder 41
final ClosureInterface<Integer> multiplyBy5 = i -> 5 * i;
multiplyBy5.call(4)
public interface ClosureInterface<T> { T call(T t);}
![Page 42: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/42.jpg)
Copyright © 2013 Russel Winder 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.
![Page 43: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/43.jpg)
Copyright © 2013 Russel Winder 43
Nothing much revolutionary here,just a bit of syntactic sugar…
![Page 44: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/44.jpg)
Copyright © 2013 Russel Winder 44
…true (sort of), but that isn't all there is…
![Page 45: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/45.jpg)
Copyright © 2013 Russel Winder 45
A Middle
![Page 46: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/46.jpg)
Copyright © 2013 Russel Winder 46
It all about where the iteration is.
![Page 47: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/47.jpg)
Copyright © 2013 Russel Winder 47
Explicit iteration
vs.
Implicit iteration
![Page 48: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/48.jpg)
Copyright © 2013 Russel Winder 48
Work with a (trivial) example:
![Page 49: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/49.jpg)
Copyright © 2013 Russel Winder 49
Calculate the sum of the squares of the numbers between 0 and 100 that are
divisible by 7.
![Page 50: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/50.jpg)
Copyright © 2013 Russel Winder 50
int sum = 0;for (int i = 0; i < 100; ++i) { if (i % 7 == 0) { sum += i * i; }}
![Page 51: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/51.jpg)
Copyright © 2013 Russel Winder 51
(for (i <- 0 until 100; if i % 7 == 0) yield i * i).sum
![Page 52: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/52.jpg)
Copyright © 2013 Russel Winder 52
sum({for (i in 0..100) if (i % 7 == 0) i * i})
![Page 53: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/53.jpg)
Copyright © 2013 Russel Winder 53
sum(i * i for i in range(100) if i % 7 == 0)
![Page 54: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/54.jpg)
Copyright © 2013 Russel Winder 54
(0 until 100).filter(i => i %7 == 0).map(i => i * i).sum
![Page 55: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/55.jpg)
Copyright © 2013 Russel Winder 55
0.rangeTo(100).iterator().filter{i -> i % 7 == 0}.map{i -> i * i}.reduce{a, b -> a + b}
![Page 56: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/56.jpg)
Copyright © 2013 Russel Winder 56
sum((0..100).filter((Integer i) => i % 7 == 0).map((Integer i) => i * i))
![Page 57: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/57.jpg)
Copyright © 2013 Russel Winder 57
(0..100).findAll{i -> i % 7 == 0}.collect{i -> i * i}.sum()
![Page 58: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/58.jpg)
Copyright © 2013 Russel Winder 58
(0..100).findAll{it % 7 == 0}.collect{it * it}.sum()
![Page 59: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/59.jpg)
Copyright © 2013 Russel Winder 59
Streams.intRange(0, 100).filter(i -> i % 7 == 0).map(i -> i * i).sum()
![Page 60: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/60.jpg)
Copyright © 2013 Russel Winder 60
Higher Order Functions
![Page 61: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/61.jpg)
Copyright © 2013 Russel Winder 61
Functions that take functions as parameters and/or return functions as result.
![Page 62: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/62.jpg)
Copyright © 2013 Russel Winder 62
Some may be thinking:
Why do I give a f###?
![Page 63: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/63.jpg)
Copyright © 2013 Russel Winder 63
After all nothing good has happenedin Java since Java 1.4.2.
![Page 64: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/64.jpg)
Copyright © 2013 Russel Winder 64
![Page 65: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/65.jpg)
Copyright © 2013 Russel Winder 65
Because all computers arenow parallel computers.
![Page 66: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/66.jpg)
Copyright © 2013 Russel Winder 66
![Page 67: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/67.jpg)
Copyright © 2013 Russel Winder 67
We have to move to an attitude where we assume our software is not uniprocessor.
![Page 68: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/68.jpg)
Copyright © 2013 Russel Winder 68
We have to actually do object-orientedand functional programming.
![Page 69: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/69.jpg)
Copyright © 2013 Russel Winder 69
Instead of just saying we write code usingJava, C++, etc. and so must be
doing object-oriented programming.
![Page 70: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/70.jpg)
Copyright © 2013 Russel Winder 70
Streams.intRange(0, 100).filter(i -> i % 7 == 0).map(i -> i * i).sum()
From earlier…
![Page 71: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/71.jpg)
Copyright © 2013 Russel Winder 71
Streams.intRange(0, 100).parallel().filter(i -> i % 7 == 0).map(i -> i * i).sum()
![Page 72: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/72.jpg)
Copyright © 2013 Russel Winder 72
Data parallelism with a single method call.
![Page 73: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/73.jpg)
Copyright © 2013 Russel Winder 73
GParsPool.withPool { (0..100).findAllParallel{it % 7 == 0}.collectParallel{it * it}.sum()}
![Page 74: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/74.jpg)
Copyright © 2013 Russel Winder 74
GParsPool.withPool { (0..100).parallel.filter{it % 7 == 0}.map{it * it}.sum()}
![Page 75: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/75.jpg)
Copyright © 2013 Russel Winder 75
def value = (0..100)ParallelEnhancer.enhanceInstance(value)value = value.parallel.filter{it % 7 == 0}.map{it * it}.sum()
![Page 76: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/76.jpg)
Copyright © 2013 Russel Winder 76
def value = (0..100)ParallelEnhancer.enhanceInstance(value)value = value.findAllParallel{it % 7 == 0}.collectParallel{it * it}.sum()
![Page 77: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/77.jpg)
Copyright © 2013 Russel Winder 77
GPars and Groovy give you Java 8 styleapproach and parallelism today
for Java with JDK6 or JDK7.
![Page 78: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/78.jpg)
Copyright © 2013 Russel Winder 78
Guava, TotallyLazy, and FunctionalJava can be usedtoday to practice the functional approach using Java.
![Page 79: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/79.jpg)
Copyright © 2013 Russel Winder 79
Using Scala is an option fordoing functional programming*.
*And just ignore Java altogether.
![Page 80: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/80.jpg)
Copyright © 2013 Russel Winder 80
(0 until 100).par.filter(i => i %7 == 0).map(i => i * i).sum
![Page 81: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/81.jpg)
Copyright © 2013 Russel Winder 81
Or just install the JDK8 Lambda release.
![Page 82: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/82.jpg)
Copyright © 2013 Russel Winder 82
![Page 83: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/83.jpg)
Copyright © 2013 Russel Winder 83
![Page 84: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/84.jpg)
Copyright © 2013 Russel Winder 84
What is the Value of ?
Easy, it's known exactly.
It's .
Obviously.
![Page 85: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/85.jpg)
Copyright © 2013 Russel Winder 85
It's simples Александр Орлов 2009
![Page 86: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/86.jpg)
Copyright © 2013 Russel Winder 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.
4=∫0
1 1
1x2dx
![Page 87: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/87.jpg)
Copyright © 2013 Russel Winder 87
One Possible Algorithm
● Use quadrature to estimate the value of the integral – which is the area under the curve.
=4n∑i=1
n 1
1i−0.5n
2
With n = 3 not much to do, but potentially lots of error. Use n = 107 or n = 109?
Embarrassingly parallel.
![Page 88: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/88.jpg)
Copyright © 2013 Russel Winder 88
Because addition is commutative andassociative, expression can be
decomposed into sums of partial sums.
![Page 89: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/89.jpg)
Copyright © 2013 Russel Winder 89
a + b + c + d + e + f
=
( a + b ) + ( c + d ) + ( e + f )
![Page 90: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/90.jpg)
Copyright © 2013 Russel Winder 90
Scatter – Gather
map reduce
![Page 91: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/91.jpg)
Copyright © 2013 Russel Winder 91
Code!
![Page 92: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/92.jpg)
Copyright © 2013 Russel Winder 92
An End
![Page 93: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/93.jpg)
Copyright © 2013 Russel Winder 93
Java is about to get the functional programming approach.
![Page 94: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/94.jpg)
Copyright © 2013 Russel Winder 94
Scala, Groovy, Kotlin, Ceylon,Python, D, C++, etc.
already have object-orientedand functional*.
* Well Scala has.
![Page 95: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/95.jpg)
Copyright © 2013 Russel Winder 95
It's all about how your data evolves.
It's not about the flow of control.
![Page 96: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/96.jpg)
Copyright © 2013 Russel Winder 96
Closures the next “big thing” in Java?
![Page 97: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/97.jpg)
Copyright © 2013 Russel Winder 97
Yes*.
*But will everyone ignore it?
![Page 98: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/98.jpg)
Copyright © 2013 Russel Winder 98
No.
![Page 99: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/99.jpg)
Copyright © 2013 Russel Winder 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.
![Page 100: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/100.jpg)
Copyright © 2013 Russel Winder 100
Interstitial Advertisement
?
![Page 101: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/101.jpg)
Copyright © 2013 Russel Winder 101
The End
![Page 102: Java 8: a New Beginning](https://reader034.vdocuments.us/reader034/viewer/2022051013/547d1c92b479597f508b4833/html5/thumbnails/102.jpg)
Copyright © 2013 Russel Winder 102
Java 8A New Beginning
Russel Winder
email: [email protected]: [email protected]
twitter: @russel_winderWeb: http://www.russel.org.uk/