一、Stream流概述
Stream流把真正的函数式编程风格引入到Java中
二、Stream流的生成
生成流:通过数据源(集合,数组等)生成流
1、stream()
Collection体系的集合可以使用默认方法stream()生成流default Stream <E> stream()
List<String> list = new ArrayList<>();
Stream<String> listStream = list.stream();
Set<String> set = new HashSet<>();
Stream<String> setStream = set.stream();
2、间接生成
Map体系的集合间接的生成流
Map<Integer,String> map = new HashMap<>();
Stream<Integer> keyStream = map.keySet().stream();
Stream<String> valueStream = map.values().stream();
3、静态方法
数组可以通过Stream接口的静态方法of(T.. values)生成流
int[] arr = {
1,2,3};
Stream<int[]> arrStream = Stream.of(arr);
三、Stream流的中间操作
中间操作:打开流,做数据过滤/映射,返回一个新的流,交给下一个操作使用
filter(Predicate predicate)
:过滤流- Predicate接口的方法:
boolean test(T t)
- Predicate接口的方法:
limit(long maxSize)
:截取流的前部分skip(long n)
:跳过前n个流comcat(Stream a, Stream b)
:合并ab流distinct()
:过滤掉相同元素sort()
:自然排序sort(Comparator com)
:指定排序map(Function mapper)
:返回函数结果流list.stream().map(Integer::parseInt).foEach(System.out::println);
mapToInt(Function mapper)
:返回函数结果的IntStreamsum()
:流中元素的和
四、Stream流的终结操作
终结操作:一个流只能有一个终结操作,终结后,流无法再被操作。
forEach(Function action)
:对每个流操作long count()
:流中元素数
五、Stream流的收集操作
R collect(Collector collector)
:收集了流中数据
- Collector接口
- 工具类Collectors返回Collector
toMap()
toSet()
toList(Function f1, Function f2)
List<String> list = listStream.collect(Collectors.toList());
Set<String> set = setStream.collect(Collectors.toSet());
Map<String,String> map = mapStream.collect(Collectors.toMap(s->s.split(":")[0],s->s.split(":")[1]));