package com.yutax77.java8_ans.chap6;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentMap;

public class Ans5 {
    public static class WordCollector implements Callable<Void> {
        private final File file;
        private final List<String> words;
        private final ConcurrentMap<String, Set<File>> collector;
        
        public WordCollector(File file, ConcurrentMap<String, Set<File>> collector) throws IOException {
            this.file = file;
            
            String contents = new String(Files.readAllBytes(file.toPath()),
                    StandardCharsets.UTF_8); 
            words = Arrays.asList(contents.split("[\\P{L}]+"));
            
            this.collector = collector;
        }
        
        @Override
        public Void call() {
            for(String word: words) {
                collector.merge(
                        word, 
                        new HashSet<File>(Arrays.asList(file)), 
                        (oldVal, val) -> {
                            val.addAll(oldVal);
                            return val;
                        });
                
            }
            return null;
        }
    }
}

@@ -29,17 +29,19 @@
 s.chap6;
-%0A
+%0D%0A%0D
 %0Aimport 
@@ -53,16 +53,17 @@
 io.File;
+%0D
 %0Aimport 
@@ -82,16 +82,17 @@
 ception;
+%0D
 %0Aimport 
@@ -125,16 +125,17 @@
 harsets;
+%0D
 %0Aimport 
@@ -154,16 +154,17 @@
 e.Files;
+%0D
 %0Aimport 
@@ -180,16 +180,17 @@
 .Arrays;
+%0D
 %0Aimport 
@@ -203,16 +203,14 @@
 til.
-HashSe
+Lis
 t;
+%0D
 %0Aimp
@@ -223,21 +223,21 @@
 va.util.
-Lis
+Se
 t;
+%0D
 %0Aimport 
@@ -246,20 +246,37 @@
 va.util.
-Set;
+concurrent.Callable;%0D
 %0Aimport 
@@ -297,24 +297,30 @@
 urrent.C
-allable;
+oncurrentMap;%0D
 %0Aimport 
@@ -354,13 +354,23 @@
 rent
-Map;%0A
+SkipListSet;%0D%0A%0D
 %0Apub
@@ -385,16 +385,17 @@
 s Ans5 %7B
+%0D
 %0A    pub
@@ -452,16 +452,17 @@
 %3CVoid%3E %7B
+%0D
 %0A       
@@ -482,24 +482,25 @@
 l File file;
+%0D
 %0A        pri
@@ -529,16 +529,17 @@
 %3E words;
+%0D
 %0A       
@@ -588,32 +588,33 @@
 ile%3E%3E collector;
+%0D
 %0A        %0A      
@@ -598,32 +598,33 @@
 ector;%0D%0A        
+%0D
 %0A        public 
@@ -712,16 +712,17 @@
 eption %7B
+%0D
 %0A       
@@ -743,16 +743,17 @@
  = file;
+%0D
 %0A       
@@ -749,32 +749,33 @@
 e;%0D%0A            
+%0D
 %0A            Str
@@ -834,16 +834,17 @@
 Path()),
+%0D
 %0A       
@@ -881,16 +881,17 @@
 UTF_8); 
+%0D
 %0A       
@@ -946,16 +946,17 @@
 L%7D%5D+%22));
+%0D
 %0A       
@@ -952,32 +952,33 @@
 );%0D%0A            
+%0D
 %0A            thi
@@ -1001,16 +1001,17 @@
 llector;
+%0D
 %0A       
@@ -1004,32 +1004,33 @@
 ctor;%0D%0A        %7D
+%0D
 %0A        %0A      
@@ -1014,32 +1014,33 @@
      %7D%0D%0A        
+%0D
 %0A        @Overri
@@ -1041,16 +1041,17 @@
 Override
+%0D
 %0A       
@@ -1071,16 +1071,17 @@
 call() %7B
+%0D
 %0A       
@@ -1110,16 +1110,17 @@
 words) %7B
+%0D
 %0A       
@@ -1144,16 +1144,17 @@
 r.merge(
+%0D
 %0A       
@@ -1176,16 +1176,17 @@
   word, 
+%0D
 %0A       
@@ -1210,20 +1210,30 @@
 new 
-HashSet%3CFile
+ConcurrentSkipListSet%3C
 %3E(Ar
@@ -1252,16 +1252,17 @@
 file)), 
+%0D
 %0A       
@@ -1296,16 +1296,17 @@
 al) -%3E %7B
+%0D
 %0A       
@@ -1345,16 +1345,17 @@
 oldVal);
+%0D
 %0A       
@@ -1386,16 +1386,17 @@
 urn val;
+%0D
 %0A       
@@ -1415,16 +1415,17 @@
      %7D);
+%0D
 %0A       
@@ -1433,16 +1433,17 @@
         
+%0D
 %0A       
@@ -1444,24 +1444,25 @@
            %7D
+%0D
 %0A           
@@ -1474,16 +1474,17 @@
 rn null;
+%0D
 %0A       
@@ -1489,13 +1489,16 @@
    %7D
+%0D
 %0A    %7D
+%0D
 %0A%7D
+%0D
 %0A

Change HashSet -> ConcurrentSkipListSet