Java中Stream流的基本用法

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
1.使用Stream首先是获取流,以List、Map和数组为例

//List获取流
List list = Arrays.asList("item1", "item2", "item3", "item4", "item5");
Stream stream = list.stream();
//Map获取流
Map map = new HashMap<>();
//获取key的流
Stream stream1 = map.keySet().stream();
//获取value的流
Stream stream2 = map.values().stream();
//获取键值对的流
Stream> stream3 = map.entrySet().stream();
//数组获取流
String[] str = {"111", "222", "333"};
Stream stream4 = Stream.of(str);

2.Stream的常用方法
forEach()方法,遍历流并打印每个元素。

stream.forEach(System.out::println);

count()方法,用于返回当前Stream流中元素个数,返回值为long类型

long count = stream.count();

limit()skip()方法,limit()用于截取前几个元素,而skip()用于删除前几个元素(如果超过总量,返回空)。

//保留前3个元素
Stream limit = stream.limit(3);
/*
stream只能被操作一次,否则会报错:stream has already been operated upon or closed
保留后3个元素
*/
Stream skip = stream.skip(2);

filter()方法接受一个函数接口当作筛选条件,保留满足条件的元素。

//获取元素是item3的流
Stream item3 = stream.filter(s -> s.equals("item3"));

map()方法,用于对流中的元素进行加工。该方法的形参也是一个函数式接口。

//对流中的每个元素拼接map字符串
Stream stringStream = stream.map(s -> s + "map");

concat()方法,用于拼接两个流。如果两个流的泛型不同,返回类型可以为Object类型

List list1 = Arrays.asList( "item6");
Stream stream5 = list1.stream();
Stream concat = Stream.concat(stream, stream5);

reduce()方法,实现从Stream中生成一个值,其生成的值不是随意的,而是根据指定的计算模型。

//初始值为3,计算3依次乘以list里面的各个元素的积
List list = Arrays.asList(1, 2, 4, 2, 6, 7);
//结果为2016
Integer reduce = list.stream().reduce(3, (m, n) -> m * n);

3.Stream再次转化为集合或者数组
collect()方法用于将流转化为集合。

//转化为List
List collect = stream.collect(Collectors.toList());
//转化为Set
Set set= stream.collect(Collectors.toSet());

toArray()方法用于将流转化成数组。

//默认数组是Object类型
Object[] objects = stream.toArray();
//指定转化后的类型
String[] strings = stream.toArray(String[]::new);

你可能感兴趣的:(Java中Stream流的基本用法)