Core Java
Java 8 Lambdas in One Line
If you understand this line, or better still can write this code you can pretty much say that you have understood the essence of Java 8 Lambdas. Certainly in as much as they can be used with collections.
I found this in a recent presentation by Peter Lawrey. (Definitely worth watching the whole presentation when you have a spare hour.)
Anyway the task was to find the 20 most frequent words in a file:
As you can see, with Java 8 this can actually be done in a single (albeit rather long) line.
If you’re not used to lambdas the code might seem a little scary but actually it’s pretty declarative and when you get past the logic reads fairly easily.
package util; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Lambdas in one line */ public class LambdaTest { public static List<String> parse(Path path) throws Exception{ return Files.lines(path) .parallel() .flatMap(line -> Arrays.asList(line.split("\\b")).stream()) .collect(Collectors.groupingBy(w -> w, Collectors.counting())) .entrySet().stream() .sorted(Comparator.comparing(Map.Entry<String, Long>::getValue).reversed()) .limit(20) .map(Map.Entry::getKey) .collect(Collectors.toList()); } public static void main(String... args) throws Exception{ System.out.println(parse(Paths.get(args[0]))); } }
Reference: | Java 8 Lambdas in One Line from our JCG partner Daniel Shaya at the Rational Java blog. |
If this is the future then we are doomed.