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