张彬CKA认证考前辅导
class CountWord extends RecursiveTask<Map<String, Long>> {
private final List<File> files;
public CountWord(List<File> files) {
this.files = files;
}
@Override
protected Map<String, Long> compute() {
if (files.isEmpty()) {
return Collections.emptyMap();
}
if (files.size() == 1) {
return count(files.get(0));
}
int mid = files.size() / 2;
CountWord left = new CountWord(files.subList(0, mid));
CountWord right = new CountWord(files.subList(mid, files.size()));
left.fork();
right.fork();
return Stream.of(left.join(), right.join())
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
Long::sum
));
}