Slap bang in the middle of Chapter 5 already which talks about the Stream
API and lovin’ it …
… but I’m getting ahead of myself.
The big change for long time Java programmers is the jump to Java 8. Quite literally it is the ability switch from coding in OO to coding in FP. When written well, Java8 code looks quite different to its previous versions.
Here is a very simple example.
Pre Java 8
Using a for
loop to iterate a list of String
objects.
This is known as external iteration.
public String findWordInList(String wordToFind, List<String> words) {
for (String word: words) {
if (word.equals(wordToFind)) {
return word;
}
}
return "";
}
Java 8
The same as above but using filter()
& findFirst()
from the Stream
API and a lambda predicate. This is known as internal iteration.
public String findWordInList(String word, List<String>) {
return words.stream()
.filter(w -> w.equals(wordToFind))
.findFirst()
.orElse("");
}
The advantage of internal iteration is that the Stream library can choose a data representation and implementation of parallelism.
To use parallelism you just need to rewrite your code as follows:
public String findWordInList(String word, List<String>) {
return words.parallelStream()
.filter(w -> w.equals(wordToFind))
.findFirst()
.orElse("");
}
When I see a for
statement in code at work these days I experience something akin to being asked to believe that Harry Potter is 14 years old in Harry Potter and the Deathly Hollows.
to be continued …