java8的Stream
Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
中间操作
filter(Predicate<T> predicate)
: 过滤满足条件的元素。map(Function<T, R> mapper)
: 映射元素到另一种类型。flatMap(Function<T, Stream<R>> mapper)
: 将每个元素映射成一个流,并将多个流扁平化为一个流。distinct()
: 去除重复的元素。sorted()
: 对元素进行自然顺序排序。sorted(Comparator<T> comparator)
: 使用自定义比较器对元素进行排序。peek(Consumer<T> action)
: 在处理每个元素时执行一些操作,但不改变流中的元素。
终端操作
forEach(Consumer<T> action)
: 对每个元素执行操作。toArray()
: 将流中的元素收集到数组中。collect(Collector<T, A, R> collector)
: 将元素收集到一个集合或数据结构中。reduce(T identity, BinaryOperator<T> accumulator)
: 使用给定的初始值和累加函数,将流中的元素归约为一个值。min(Comparator<T> comparator)
: 返回流中的最小元素。max(Comparator<T> comparator)
: 返回流中的最大元素。count()
: 返回流中元素的个数。anyMatch(Predicate<T> predicate)
: 检查是否有元素满足条件。allMatch(Predicate<T> predicate)
: 检查是否所有元素都满足条件。noneMatch(Predicate<T> predicate)
: 检查是否没有元素满足条件。findFirst()
: 返回流中的第一个元素。findAny()
: 返回流中的任意一个元素。
其他操作
concat(Stream<T> a, Stream<T> b)
: 将两个流合并为一个流。iterate(T seed, UnaryOperator<T> f)
: 生成一个无限流,以指定的初始值和递增函数生成序列。generate(Supplier<T> s)
: 生成一个无限流,使用提供的供应商生成元素。
java8的Stream
http://hanqichuan.com/2023/08/23/java/java8的Stream/