如果您了解这一行,或者更好的是仍然可以编写此代码,则可以说您已经了解了Java 8 Lambda的本质。 当然,它们可以与集合一起使用。
我在Peter Lawrey最近的一次演讲中发现了这一点 。 (有空余时间绝对值得观看整个演示文稿。)
无论如何,任务是在文件中找到最常见的20个单词 :
如您所见,使用Java 8,实际上可以在一行(尽管很长)中完成。
如果您不习惯使用lambda,则代码可能看起来有些吓人,但实际上它是声明性的,当您通过逻辑时,它的读取就很容易了。
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])));}
}
翻译自: https://www.javacodegeeks.com/2015/04/java-8-lambdas-in-one-line.html