java stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。stream将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
+--------------------+ +------+ +------+ +---+ +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+ +------+ +------+ +---+ +-------+
生成流
//直接生成
Stream stream = Stream.of(1,2,3,4);
// 使用Arrays.stream
int intArray[]={1,2,3,4};
IntStream intStream =Arrays.stream(intArray);
// 使用Collections
List<int[]> list = Arrays.asList(a);
stream = list.stream();
其中IntStream是Stream的包装类型,也可以使用Stream< Integer >,同理还有LongStream、DoubleStream。
流操作
生成流之后就可以对流进行操作。
filter
filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤掉1:
int a[]={7,1,8};
//count的返回值的long类型,因此要加一个强制类型转换(int)
//计算a中不为1的个数
int res=(int)Arrays.stream(a).filter(x -> x!=1).count();
System.out.println(res);
输出为2
map
map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:
List<Integer> numbers = Arrays.asList(7,7,1,8);
List<Integer> res= numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
distinct()
的作用是去除重复值,因此res的值为[49,1,64]
sorted
sorted 方法用于对流进行排序。
List<Integer> numbers = Arrays.asList(7,7,1,8);
List<Integer> res= numbers.stream().map( i -> i*i).distinct().sorted().collect(Collectors.toList());
res的值为[1,49,64]
更多示例参看菜鸟教程