• java 8 Stream


    1. Stream是元素的集合,这点让Stream看起来用些类似Iterator;
    2. 可以支持顺序和并行的对原Stream进行汇聚的操作;

    http://www.importnew.com/24300.html

    http://www.jianshu.com/p/cbd5713a8f26

    创建流->转换流->聚合流

    创建流:
    数组创建Stream: Arrays.stream()Stream.of()


    集合创建:

    1,Stream.of()

    2,Stream.generate()

    Stream.generate(new Supplier<Double>() {
        @Override
        public Double get() {
            return Math.random();
        }
    });
    
    Stream.generate(() -> Math.random());
    
    Stream.generate(Math::random);
    这三个的意思是一样的。
    generate是建立了一个无限长度的Stream
    其元素的生成是通过给定的Supplier(这个接口可以看成一个对象的工厂,每次调用返回一个给定类型的对象)
    例如: Stream.generate(()->"HelloWorld").forEach(System.out::println);
    无限打印“Hello World”

    3,Stream.iterate()

    Stream.iterate(seed,func(seed))
    相当于每一次取出一个值,分别是 seed、func(seed)、func(func(seed))
    例如:
    Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);
    打印出1--10

    4,Collection.stream()

    5,Collectrion.parallelStream()//创建并行的流

    转换流

    • 过滤操作filter,distinct
    • 变换操作map,flatMap
    • 拆分合并流操作limit,skip,concat,peek
    • 排序操作sorted,unordered

    flatMap: 是e->Stream的转换,把每一个元素变成一个流,然后合并起来

    private static void flatMapStream() {
        String [] strs1 = {"a","b","c"};
        String [] strs2 = {"d","e","f"};
        String [] strs3 = {"a","g","h"};
        Arrays.asList(strs1,strs2,strs3)
              .stream()
              .flatMap(str -> Stream.of(str))
              .map(s -> s+",")
              .forEach(System.out::print);
        }
    
    流本身是一个 Stream(<String[]>) ,就是关于String[]的一个流,通过flatMap之后,把每一个String[]元素里面的内容拿出来了,做成了一个新的流

    concat

    static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
    将两个Stream合并成一个,这个方法一次只能用来合并两个Stream,不能一次多个Stream合并。
    Sorted
    sorted(Comparator< ? super T > comparator)

    可以自定义多个条件的比较

    Arrays.asList("ae", "f", "gqet", "abcd", "ertyu", "zxc")
          .stream()
          .sorted(
                   Comparator.comparing(String::length)
                             .thenComparing(String::compareTo)
                 )
          .forEach(System.out::println);

    .Stream的结果处理

    • 遍历forEach
    • 聚合reduce
    • Optional类型
    • 收集collect
  • 相关阅读:
    angry_birds_again_and_again(2014年山东省第五届ACM大学生程序设计竞赛A题)
    数学入门题目
    POJ1236:Network of Schools(tarjan+缩点)?
    POJ2186:Popular Cows(tarjan+缩点)
    HDU2426:Interesting Housing Problem(还没过,貌似入门题)
    POJ1175:Starry Night(bfs)
    POJ2506:Tiling(递推+大数斐波那契)
    POJ2135:Farm Tour
    POJ2195:Going Home(费用流入门)
    POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/6780885.html
Copyright © 2020-2023  润新知