4343public class WordCount {
4444
4545 // Integers.add.f(1) caused an SOE...
46- private static final F <Integer ,Integer > addOne = new F <Integer ,Integer >() {
47- @ Override
48- public Integer f (Integer a ) {
49- return a .intValue () + 1 ;
50- }
51- };
46+ private static final F <Integer ,Integer > addOne = a -> a .intValue () + 1 ;
5247
5348 private static <K , V > Map <K , V > update (Map <K , V > map , K key , F <V , V > valueFunction ,
5449 V initialValue ) {
@@ -60,37 +55,28 @@ private static <K, V> Map<K, V> update(Map<K, V> map, K key, F<V, V> valueFuncti
6055 return map ;
6156 }
6257
63- private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharChunkIteratee = new F <String , Map <String , Integer >>() {
64- @ Override
65- public Map <String , Integer > f (final String fileName ) {
58+ private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharChunkIteratee = fileName -> {
6659 try {
6760 return IOFunctions .enumFileCharChunks (new File (fileName ), Option .<Charset >none (), wordCountsFromCharChunks ()).run ().run ();
6861 } catch (final IOException e ) {
6962 throw new RuntimeException (e );
7063 }
71- }
7264 };
7365
74- private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharChunk2Iteratee = new F <String , Map <String , Integer >>() {
75- @ Override
76- public Map <String , Integer > f (final String fileName ) {
66+ private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharChunk2Iteratee = fileName -> {
7767 try {
7868 return IOFunctions .enumFileChars (new File (fileName ), Option .<Charset > none (), wordCountsFromChars ()).run ().run ();
7969 } catch (final IOException e ) {
8070 throw new RuntimeException (e );
8171 }
82- }
8372 };
8473
85- private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharIteratee = new F <String , Map <String , Integer >>() {
86- @ Override
87- public Map <String , Integer > f (final String fileName ) {
74+ private static final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithCharIteratee = fileName -> {
8875 try {
8976 return IOFunctions .enumFileChars (new File (fileName ), Option .<Charset > none (), wordCountsFromChars ()).run ().run ();
9077 } catch (final IOException e ) {
9178 throw new RuntimeException (e );
9279 }
93- }
9480 };
9581
9682 /** An iteratee that consumes char chunks and calculates word counts */
@@ -145,12 +131,7 @@ public IterV<char[], Map<String, Integer>> _1() {
145131 return IterV .done (acc ._2 (), Input .<char []>eof ());
146132 }
147133 };
148- return new F <Input <char []>, IterV <char [], Map <String , Integer >>>() {
149- @ Override
150- public IterV <char [], Map <String , Integer >> f (final Input <char []> s ) {
151- return s .apply (empty , el , eof );
152- }
153- };
134+ return s -> s .apply (empty , el , eof );
154135 }
155136 };
156137 return IterV .cont (step .f (P .p (new StringBuilder (), (Map <String , Integer >)new HashMap <String , Integer >())));
@@ -164,20 +145,10 @@ public static final <E> IterV<Character, Map<String, Integer>> wordCountsFromCha
164145
165146 @ Override
166147 public F <Input <Character >, IterV <Character , Map <String , Integer >>> f (final P2 <StringBuilder ,Map <String , Integer >> acc ) {
167- final P1 <IterV <Character , Map <String , Integer >>> empty =
168- new P1 <IterV <Character , Map <String , Integer >>>() {
169- @ Override
170- public IterV <Character , Map <String , Integer >> _1 () {
171- return IterV .cont (step .f (acc ));
172- }
173- };
148+ final P1 <IterV <Character , Map <String , Integer >>> empty = P .lazy (() -> IterV .cont (step .f (acc )));
174149 final P1 <F <Character , IterV <Character , Map <String , Integer >>>> el =
175- new P1 <F <Character , IterV <Character , Map <String , Integer >>>>() {
176- @ Override
177- public F <Character , IterV <Character , Map <String , Integer >>> _1 () {
178- return new F <Character , Iteratee .IterV <Character , Map <String , Integer >>>() {
179- @ Override
180- public IterV <Character , Map <String , Integer >> f (final Character e ) {
150+ P .lazy (() -> {
151+ return e -> {
181152 if (Character .isWhitespace (e .charValue ())) {
182153 final StringBuilder sb = acc ._1 ();
183154 if (sb .length () > 0 ) {
@@ -193,28 +164,18 @@ public IterV<Character, Map<String, Integer>> f(final Character e) {
193164 acc ._1 ().append (e );
194165 return IterV .cont (step .f (acc ));
195166 }
196- }
197167 };
198- }
199- };
200- final P1 <IterV <Character , Map <String , Integer >>> eof =
201- new P1 <IterV <Character , Map <String , Integer >>>() {
202- @ Override
203- public IterV <Character , Map <String , Integer >> _1 () {
168+ });
169+ final P1 <IterV <Character , Map <String , Integer >>> eof = P .lazy (() -> {
204170 final StringBuilder sb = acc ._1 ();
205171 if (sb .length () > 0 ) {
206172 final Map <String , Integer > map = update (acc ._2 (), sb .toString (), addOne , Integer .valueOf (0 ));
207173 return IterV .done (map , Input .<Character >eof ());
208174 }
209175 return IterV .done (acc ._2 (), Input .<Character >eof ());
210176 }
211- };
212- return new F <Input <Character >, IterV <Character , Map <String , Integer >>>() {
213- @ Override
214- public IterV <Character , Map <String , Integer >> f (final Input <Character > s ) {
215- return s .apply (empty , el , eof );
216- }
217- };
177+ );
178+ return s -> s .apply (empty , el , eof );
218179 }
219180 };
220181 return IterV .cont (step .f (P .p (new StringBuilder (), (Map <String , Integer >)new HashMap <String , Integer >())));
@@ -229,11 +190,7 @@ public static void main(String[] args) throws IOException {
229190 final P2 <List <String >, Map <String , Integer >> result = writeSampleFiles (numFiles , numSharedWords );
230191 final List <String > fileNames = result ._1 ();
231192 final Map <String , Integer > expectedWordsAndCounts = result ._2 ();
232- long avgSize = fileNames .foldLeft (new F2 <Long , String , Long >() {
233- @ Override
234- public Long f (Long a , String file ) {
235- return a .longValue () + new File (file ).length ();
236- }}, 0l ) / fileNames .length ();
193+ long avgSize = fileNames .foldLeft ((a , file ) -> a .longValue () + new File (file ).length (), 0l ) / fileNames .length ();
237194 System .out .println ("Processing " + numFiles + " files with ~" +numSharedWords +" words and an avg size of " + avgSize + " bytes." );
238195
239196 // warmup
@@ -349,12 +306,7 @@ private static P2<List<String>, Map<String, Integer>> writeSampleFiles(
349306 public static Map <String , Integer > getWordsAndCountsFromFilesWithIteratee (final List <String > fileNames ,
350307 final F <String , Map <String , Integer >> fileNameToWordsAndCountsWithIteratee ) {
351308 final List <Map <String , Integer >> maps = fileNames .map (fileNameToWordsAndCountsWithIteratee );
352- return maps .foldLeft (new F2 <Map <String , Integer >, Map <String , Integer >, Map <String , Integer >>() {
353- @ Override
354- public Map <String , Integer > f (Map <String , Integer > a , Map <String , Integer > b ) {
355- return plus (a , b );
356- }
357- }, new HashMap <String , Integer >());
309+ return maps .foldLeft ((Map <String , Integer > a , Map <String , Integer > b ) -> plus (a , b ), new HashMap <String , Integer >());
358310 }
359311
360312 public static Map <String , Integer > getWordsAndCountsFromFilesInParallel (
@@ -374,21 +326,7 @@ public static Map<String, Integer> getWordsAndCountsFromFilesInParallel(
374326 public static Promise <Map <String , Integer >> getWordsAndCountsFromFiles (
375327 final List <String > fileNames , final F <String , Map <String , Integer >> fileNameToWordsAndCounts , final ParModule m ) {
376328 final F <Map <String , Integer >, F <Map <String , Integer >, Map <String , Integer >>> MapSum =
377- new F <Map <String , Integer >, F <Map <String , Integer >, Map <String , Integer >>>() {
378- @ Override
379- public F <Map <String , Integer >, Map <String , Integer >> f (
380- final Map <String , Integer > a ) {
381- return new F <Map <String , Integer >, Map <String , Integer >>() {
382-
383- @ Override
384- public Map <String , Integer > f (final Map <String , Integer > b ) {
385- return plus (a , b );
386- }
387-
388- };
389- }
390-
391- };
329+ a -> b -> plus (a , b );
392330 final Monoid <Map <String , Integer >> monoid = monoid (MapSum ,
393331 new HashMap <String , Integer >());
394332 return m .parFoldMap (fileNames , fileNameToWordsAndCounts , monoid );
0 commit comments