先偷张图

Stream#
map#
<R> stream<R> map(Function<? super T, ? extends R> mapper);java挖个坑:这里他这么定义是遵从了一个 “输入逆变、输出协变“的一个规则,等后面再补一篇
Stream.of("hello", "how", "are", "you")
.map(String::length)
.forEach(System.out::println);javaflatMap#
大概就是说把元素拍扁,然后把拍扁的元素重新组成Stream,然后把这些Stream串行合并成一条Stream
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);javaStream.of("a-b-c-d", "1-2-3-4")
.flatMap(e -> Arrays.stream(e.split("-")))
.forEach(System.out::println);javalimit#
限制元素个数
distinct#
去重,默认是根据元素的equals() 和 hashCode()来判断的
filter#
给他一个条件函数传入参数返回true or false即可
Stream<T> filter(Predicate<? super T> predicate);javasorted#
用法大差不差,实现Comparable接口就行
Stream<T> sorted(); // 自然顺序
Stream<T> sorted(Comparator<? super T> comp); // 自定义比较器javacollect#
<R, A> R collect(Collector<? super T, A, R> collector);java这个要整理一下Collectors的api了,看下文吧
reduce#
类似于FP的规约操作
Optional<T> reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator);
<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);javaOptional<Integer> sum = Stream.of(1, 2, 3, 4, 5)
.reduce((a, b) -> a + b);
int sum = Stream.of(1, 2, 3, 4, 5)
.reduce(0, (a, b) -> a + b);
int lengthSum = Stream.of("a", "bb", "ccc")
.parallel()
.reduce(
0,
(sum, str) -> sum + str.length(),
Integer::sum
);
javaCollector#
Collectors.toCollection()#
将数据转成Collection,只要是Collection 的实现都可以,例如ArrayList、HashSet ,该方法接受一个Collection 的实现对象或者说Collection 工厂的入参。 包括后面也有Collectors.toList()、Collectors.toSet() ,这里只是指定了容器的类型。
Collectors.joining()#
基本语法
Collectors.joining() // 直接拼接
Collectors.joining(CharSequence delimiter) // 指定分隔符
Collectors.joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
// 指定分隔符 + 前缀 + 后缀java未完待续…