Java集合类——Stream

stream API
StreamTest

import java.util.stream.IntStream;

/**
 * 有Stream、IntStream、LongStream、DoubleStream等流式API
 * 这些API代表多个支持串行和并行聚集操作的元素
 *
 * 使用Stream或XxxStream的builder()类方法创建该Stream对应的Builder。
 * 重复调用Builder的add()方法向该流中添加多个元素。
 * 调用Builder的build()方法获取对应的Stream。
 * 调用Stream的聚集方法。
 */
public class StreamTest {
    public static void main(String[] args) {
        IntStream is = IntStream.builder().add(1).add(2).add(3).add(5).build();
        /*
        Stream提供了大量的方法进行聚集操作,这些方法既可以是“中间的”(intermediate),
        也可以是“末端的”(terminal)

        中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。下面的map方法就是中间方法。
        中间方法的返回值是另一个流

        末端方法:末端方法是对流的最终操作。当对某个Stream执行末端方法后,该流将会被“消耗”且不可再用。
        下面除了map方法,都是末端方法。

        ============================================================================
        除此之外,关于流的方法还有如下的两个特征:
        有状态的方法:这种方法会给流添加一些新的的属性,比如元素的唯一性、元素的最大数量、保证元素以排序的方式被处理。
        有状态的方法往往需要更大的性能开销

        短路方法:短路方法可以尽早结束对流的操作,不必检查所有的元素
         */
//        System.out.println(is.max().getAsInt());
//        System.out.println(is.min().getAsInt());
//        System.out.println(is.sum());
//        System.out.println(is.count());
        System.out.println(is.average());
//        System.out.println(is.allMatch(num -> num >3));
//        System.out.println(is.anyMatch(num -> num >3));

//        IntStream is2 = is.map(num -> num*num);
//        is2.forEach(System.out::println);
    }
}

StreamTest2

import java.util.ArrayList;
import java.util.Collection;

public class StreamTest2 {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add(1);
        c.add(2);
        c.add(3);
        c.add(5);
        int[] array = c.stream().mapToInt(num->(Integer)num).filter(num->num>2).toArray();
        for (Integer i:array) {
            System.out.println(i);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/woshi123/p/12503046.html