Stream流把真正的函数式编程风格引入到Java中
生成流:通过数据源(集合,数组等)生成流
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();
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);
中间操作:打开流,做数据过滤/映射,返回一个新的流,交给下一个操作使用
filter(Predicate predicate)
:过滤流
boolean test(T t)
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)
:返回函数结果的IntStream
sum()
:流中元素的和终结操作:一个流只能有一个终结操作,终结后,流无法再被操作。
forEach(Function action)
:对每个流操作long count()
:流中元素数R collect(Collector 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]));