package com.song.demo.java8;import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;/*** Java8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据* Stram API 可以提高Java程序员的生产力* 这种风格将要处理的元素集合数据看做是一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合*** +--------------------+ +------+ +------+ +---+ +-------+| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|+--------------------+ +------+ +------+ +---+ +-------+* 生成流对象* 在 Java 8 中, 集合接口有两个方法来生成流:* . stream() - 为集合创建串行流* . parallelStream() - 为集合创建并行流。***/
public class Stream {public static void main(String[] args) {List<String> names = Arrays.asList("abc", "", "bc", "efg", "abcd", "jkl");// listnames.forEach(name -> System.out.println(name + ">>"));// map 方法用于映射每个元素到对应的结果List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);List<Integer> collect = numbers.stream().map(num -> num * num).distinct().collect(Collectors.toList());System.out.println(collect);// filterList<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");long count = strings.stream().filter(str -> str.isEmpty()).count();System.out.println(count);// sortednumbers.stream().sorted().limit(4).forEach(System.out::print);System.out.println();// 并行 (parallel)程序long result = strings.parallelStream().limit(3).filter(str -> str.equalsIgnoreCase("abc")).count();System.out.println(result);// Collectors 例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:String array = strings.stream().filter(str -> str.length() > 2).collect(Collectors.joining(","));System.out.println(array);// 统计IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());}
}