# Stream 流概述
Stream 流把真正的函数式编程引入 Java 中
# Stream 流的生成
生成流:通过数据源(集合,数组等)生成流
# stream()
Collection 体系的集合可以使用默认方法 stream () 生成流: default Stream <E> stream()
List<String> list = new ArrayList<String>(); | |
Stream<String> listStream = list.Stream(); | |
Set<String> set = new HashSet<>(); | |
Stream<String> setStream = set.stream(); |
# 间接生成
Map 体系的集合间接的生成流
Map<Integer,String> map = new HashMap<>(); | |
Stream<Integer> keyStream = map.keySet().stream(); | |
Stream<String> valueStream = map.values().stream(); |
# 静态方法
数组可以通过 Stream 接口的静态方法 of (T...values) 生成流
int[] arr = {1,2,3}; | |
Stream<int[]> arrStream = Stream.of(arr); |
# Stream 流的中间操作
中间操作:打开流,做数据过滤 / 映射,返回一个新的流,交给下一个操作使用
filter(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).forEach(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.spilt(":")[0],s -> s.split(":")[1])); |