The errata list is a list of errors and their corrections that were found after the product was released.
The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.
Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update
Version |
Location |
Description |
Submitted by |
Date submitted |
Printed |
Page 34
Example 3-23 |
errata in book:
public Set<String> findLongTracks2(List<Album> albums) {
return albums.stream()
.flatMap(album -> album.getTracks())
.filter( track -> track.getLength() > 60)
.map(Track::getName)
.collect(Collectors.toSet());
}
correct would be:
public Set<String> findLongTracks2(List<Album> albums) {
return albums.stream()
.flatMap(album -> album.getTracks().stream())
.filter( track -> track.getLength() > 60)
.map(Track::getName)
.collect(Collectors.toSet());
}
|
Luis |
Jan 30, 2018 |
PDF |
Page 38
bottom |
In exercise 5, it looks like the numbering of subexercises is a bit messed up. Judging from the repository with the solutions, the part "x -> x +1" which is not numbered at all is exercise 5a, whereas "The lambda expression passed into forEach in the example" which is labeled as 'a.' is actually exercise 5b.
|
Anonymous |
Sep 13, 2019 |
Printed |
Page 52
Graph at the top |
In Figure 4-5 OverridingParent class should have its own - welcome method and NOT `welcome from Parent`, and OverridingChild should have `welcome from OverridingParent` and NOT `welcome from Parent`
|
Koray Tugay |
Dec 26, 2018 |
ePub |
Page 80
Bottom of page |
You have the following sentence:
“For example, they might assume that the object has internal state and be interfaces with a single method only coincidentally.”
I would suggest changing "be interfaces" to "is an interface." The sentence would then read:
“For example, they might assume that the object has internal state and is an interface with a single method only coincidentally.”
In any case, I don't think that "interface" can be plural, as you've written. The thing it's talking about, "object," is singular. You've made the agreement correctly with "internal state." (You didn't write "internal states"—plural.) The word "interface" should match up with the same agreement.
|
Mario Diana |
Sep 09, 2016 |
Printed |
Page 86
Code of Example 6-3 |
The following code has 3 issues.
return IntStream.range(0, N)
.parallel()
.mapToObj(twoDiceThrows()) //Error 1
.collect(groupingBy(side -> side, //Error 2
summingDouble(n -> fraction ))); //Error 3
1. The argument to mapToObj() should be a lambda expression, not a plain method call.
2. groupingBy() gets an object as parameter and the lambda expression on the right hand side should use the (.) notation to access the side field.
3. summingDouble() again gets an object and it's field should be accessed using (.) notation. **More importantly, 'fraction' needs to be multiplied by the count of occurrences of the side**
The fixed code should look something like below:
return IntStream.range(0, N)
.parallel()
.mapToObj(n->twoDiceThrows())
.collect(groupingBy(outcome ->outcome.side,
summingDouble(outcome -> fraction * outcome.n)));
-----------------------------------------------------------------------------------------------
My complete working solution is below.
package Streams;
import java.util.Map;
import java.util.Random;
import java.util.stream.IntStream;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingDouble;
public class ParallelStreams {
final static int N = 100000000;
static Random r = new Random();
public static Map<Integer, Double> parallelDiceRolls() {
double fraction = 1.0/N;
return IntStream.range(0, N)
.parallel()
.mapToObj(n->twoDiceThrows())
.collect(groupingBy(outcome ->outcome.side,
summingDouble(outcome -> fraction * outcome.n)));
}
public static void main(String[] args) {
Map<Integer, Double> results = parallelDiceRolls();
results.forEach((x,y) -> System.out.format("%d, %f%n", x, y));
}
private static DiceOutcome twoDiceThrows() {
return new DiceOutcome(2 + r.nextInt(6) + r.nextInt(6));
}
static class DiceOutcome {
DiceOutcome(int side) {this.side = side;}
public int side;
int n = 1;
}
}
|
Murali Mohan |
Nov 01, 2018 |
ePub |
Page 2760
Collection Niceties |
In 5-30 (code under Collection Niceties) - the alternative to creating the collector is inappropriate in this case as it will not work with parallelStream
|
Muhammed Shakir |
Aug 17, 2017 |