Java8中的Stream API还是很强大的,使用起来和scala,spark的数据处理有些相似。大道至简,核心数据处理思想是一样的。虽然在每个语言里的体现开始不一样,最后殊途同归。
Steam API和Lambda表达式一起提高了编程效率和程序可读性。提供串行和并行两种模式进行汇聚操作, 并发模式能够成分利用多核处理器的优势, 使用fork/join 并行法来拆分任务和加速处理过程。
Word Count
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class TestStream {
static void wordCount() {
List lines = Arrays.asList("hello java", "hello python");
Map words = lines.stream()
.flatMap(w -> Stream.of(w.split(" ")))
.collect(Collectors.groupingBy(w -> w, Collectors.counting()));
System.out.println(words);
}
public static void main(String[] args) {
wordCount();
}
}
代码解析
先模拟文件的每一行
List lines = Arrays.asList("hello java", "hello python");
变成stream,并且执行flatMap。对每一个行,先按照空格分割成单词。
lines.steam().flatMap(w -> Stream.of(w.split(" ")))
按照单词分类,统计词频。
.collect(Collectors.groupingBy(w -> w, Collectors.counting()));