Java stream 流

中间操作

1、filter

作用:将流中的元素,基于自定义的比较器进行去重

方法定义

Stream<T> filter(Predicate<? super T> predicate);

说明:这个方法,传入一个Predicate的函数接口,关于Predicate函数接口定义,可以查看《JAVA8 Predicate接口》,这个接口传入一个泛型参数T,做完操作之后,返回一个boolean值;filter方法的作用,是对这个boolean做判断,过滤出返回值为true的对象。

2、map

作用:可以改变返回值类型,例如假定流中的元素为对象,可以将对象的的某一属性作为返回值,这时流中的元素就为该返回值了

方法定义:

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

说明:这个方法传入一个Function的函数式接口,接口定义可以查看《JAVA8 Function接口》,这个接口,接收一个泛型T,返回泛型R,map函数的定义,返回的流,表示的泛型是R对象,这个表示,调用这个函数后,可以改变返回的类型,先看下面的案例

3、flatMap

没看懂 附上链接

4、distinct

作用:基于hashCode()和equals()方法进行去重;

方法定义

Stream<T> distinct();

说明:

5、sorted

作用:对流中是元素进行排序(首先可以使用filter过滤掉null值,避免空指针)

方法定义:

//排序
Stream<T> sorted();
//根据属性排序
Stream<T> sorted(Comparator<? super T> comparator);

说明:

​ 对于sorted(),使用时要保证流中的元素实现comparable接口,因为默认的排序方式是基于自然排序进行的,也可以使用sorted(Comparator.reverseOrder())对自然序进行逆序;

​ 对于sorted(Comparator<? super T> comparator),可以使用sorted(Comparator.comparing(方法引用))来自定义比较器,同样进行逆序的方式为sorted(Comparator.comparing(方法引用).reversed())

6、peek

作用:对流中的元素进行处理,无返回值,返回的元素还是之前流中的元素,变化的是元素中的某一属性;而map会改变返回值

方法定义:

Stream<T> peek(Consumer<? super T> action);

说明:peek接收一个没有返回值的λ表达式,可以做一些输出,外部处理等。map接收一个有返回值的λ表达式,之后Stream的泛型类型将转换为map参数λ表达式返回的类型

7、limit

作用:截取前n个元素

方法定义:

//截断--取先maxSize个对象
Stream<T> limit(long n);

说明:n不能为负数,可以超出流长度

8、skip

作用: skip(long n) 方法跳过前 n (非负)个元素,返回剩下的流,有可能为空流。

方法定义:

Stream<T> limit(long n);

说明:跳过前n个元素(第N个也不取,包括第n个)返回剩下的元素,n不能为负数,也可能返回空流;

终端操作

1、

void forEach(Consumer<? super T> action);

2、

void forEachOrdered(Consumer<? super T> action);
public final <A> A[] toArray(IntFunction<A[]> generator)
boolean anyMatch(Predicate<? super T> predicate);
boolean allMatch(Predicate<? super T> predicate);
boolean noneMatch(Predicate<? super T> predicate);
long count();
T reduce(T identity, BinaryOperator<T> accumulator);
Optional<T> reduce(BinaryOperator<T> accumulator);
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner);
<R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);
  <R, A> R collect(Collector<? super T, A, R> collector);

Java stream 流的更多相关文章

  1. 一文带你入门Java Stream流,太强了

    两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...

  2. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  3. Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

  4. Java Stream 流(JDK 8 新特性)

    什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...

  5. Java | Stream流、泛型、多线程 | 整理自用

    1.lambda 表达式 lambda 的延迟执行 可以对程序进行优化,尤其是使用 if {} else {} 条件判断,先判断条件是否成立,再传入计算好的参数. functionName( para ...

  6. 深度掌握 Java Stream 流操作,让你的代码高出一个逼格!

    概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream 的操作符大体上分为两种:中间操作符和终止操作符 中 ...

  7. Java Stream流的使用

    流相关的方法可以分为三种类型,分别是:获取Stream流.中间方法.终结方法.中间方法会返回当前流,可以方便的进行链式调用. 流不可重复使用,否则会报错: java.lang.IllegalState ...

  8. Java Stream流

    Java8 Stream流编程 Stream 使用一种类似于SQL语句从数据库查询数据的直观方式来提供对 Java 集合运算和表达的高阶抽象.得益于 Lambda 所带来的函数式编程,Stream A ...

  9. Java Stream流排序null以及获取指定条数数据

    Java8的Stream流的一些用法, //排序 carerVehEntityList = carerVehEntityList.stream().sorted( Comparator.compari ...

  10. Java Stream简介, 流的基本概念

    在Javaor .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...

随机推荐

  1. 小知识:设置archive_lag_target参数强制日志切换

    为客户测试一个ADG场景问题,发现测试环境的日志切换频率过低,总是需要定期手工切换,这非常影响测试心情. 实际上,可以设置archive_lag_target参数强制日志切换. 比如设置: alter ...

  2. IBM小型机 - 登录Web控制台

    前言: IBM 小型机没有VGA或者HDMI接口,只能通过web或者串口的方式,配置和查看设备的硬件信息: 我们可以通过两种方式获取小型机的IP,并通过浏览器访问. 操作步骤: 1.服务器接通电源,直 ...

  3. Django-5:前端模板路径设定TEMPLATES DIRS和调用

    前端模板路径设定:'DIRS': [BASE_DIR / 'templates'] TEMPLATES = [ { 'BACKEND': 'django.template.backends.djang ...

  4. 选择结构do...while语句

    // do..while语句 #include<stdio.h> int main() { int a = 0; do { a++; printf("HelloWorld\n&q ...

  5. UCOS-II 任务栈空间合理分配

    最近利用空闲时间跑了一下正点原子的stm32f4开发板的实时操作系统demo,发现了一个比较有意思的东西,分享如下: 硬件平台:正点原子stm32f4开发板 软件开发平台:MDK uVision v5 ...

  6. RT_object

    以下图片来自"张世争"的微博  

  7. 通过redis学网络(2)-redis网络模型

    本系列主要是为了对redis的网络模型和集群原理进行学习,我会用golang实现一个reactor网络模型,并实现对redis协议的解析. 系列源码已经上传github https://github. ...

  8. TVM Deploy Runtime[施工中]

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17291070.html tvm 中在部署时有多个选择,最开始的graph exectuor runtime . ...

  9. prometheus Histogram 统计原理

    大家好,我是蓝胖子,书接上文,我在prometheus描点原理那一篇文章里,留了一个思考题: 我们通常会用到histogram_quantile去计算服务接口时间的耗时情况. histogram_qu ...

  10. 2023-07-12:RocketMQ如何做到消息不丢失?

    2023-07-12:RocketMQ如何做到消息不丢失? 答案2023-07-12: RocketMQ通过刷盘机制.消息拉取机制和ACK机制等多种方式来确保消息投递的可靠性,防止消息丢失. 1.刷盘 ...