JAVA8 Stream 流

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");

        // list
        names.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);

        // filter
        List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        long count = strings.stream().filter(str -> str.isEmpty()).count();
        System.out.println(count);

        // sorted
        numbers.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());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34579060/article/details/90642028