第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Sream流 方法引用

Sream流 方法引用

时间:2020-11-12 00:15:40

相关推荐

Sream流 方法引用

目录

Stream流

方法引用

Stream流

Stream(流)是一个来自数据源的元素队列

元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算

数据源 流的来源。 可以是集合,数组 等

和以前的Collection操作不同, Stream操作还有两个基础的特征:

Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluentstyle)。 这样做可以对操作进行优化, 比延迟执行(laziness)和短路( short-circuiting)

内部迭代: 以前对集合遍历都是通过Iterator或者增强for的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式,可以直接调用遍历方法

Steam流的特点

属于管道流,只能使用一次

第一个Stream流调用完毕方法,数据就会流转到下一个Stream上

而这时第一个Stream流已经使用完毕,就会关闭了

所以第一个Stream流就不能再调用方法了

Stream流中的常用方法_map

如果需要将流中的元素映射到另一个流中,可以使用map方法

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

该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流

Function中的抽象方法

R apply(T t);

代码:

importjava.util.HashMap;importjava.util.Map;importjava.util.stream.Stream;publicclassDemo05GetStream{publicstaticvoidmain(String[]args){Map<String,String>map=newHashMap<>();//...Stream<String>keyStream=map.keySet().stream();Stream<String>valueStream=map.values().stream();Stream<Map.Entry<String,String>>entryStream=map.entrySet().stream();}}

Stream流中的常用方法_count

用于统计Sream流中元素的个数

long count( );

count方法是一个中介方法,返回值是一个long类型的整数

所以不能再继续调用Stream流中的其他方法了

Stream流中的常用方法_limit

用于截取李忠的元素

limit 方法可以对流进行截取,只取用前n个。方法签名:Stream<T> limit(long maxSize);

参数是一个long类型,如果集合当前长度大于参数刚进行截取,否则不进行操作

limit方法是一个延迟方法,只是对流中的元素进行截取,返回的是一个新的流。所以可以继续调用Stream流中的其他方法

Stream流中的常用方法_skip

如果希望跳过前几个元素,可以使用 skip 方法获取一个截取之后的新流:Stream<T> skip(long n);

如果流的当前长度大于n,则跳过前n个,否则会得到一个长度为0的空流

Stream流中的常用方法_concat

如果有两个流,希望合并成为一个流,那么可以使用 Stream 接口的静态方法 concat

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

方法引用

方法引用符

双冒号 :: 为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者

通过对象名引用成员方法

使用前提:对象名是已经存在的,成员方法也是已经存在的

就可以使用对象来引用成员方法

通过类名引用静态成员方法

使用前提:类已经存在,静态成员方法也已经存在,就可以通过类名直接引用静态成员方法

Lambda表达式: n->Math.abs(n)

方法引用: Math::abs

通过super引用父类的成员方法

Lambda表达式: ()->super.sayHello()

方法引用: super::sayHello

通过this引用本类的成员方法

Lambda表达式: ()->this.buyHouse()

方法引用: this::buyHouse

类的构造器(构造方法)引用

由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用 类名称::new 的格式表示

Lambda表达式: name->newPerson(name)

方法引用: Person::new

代码:

publicclassDemo10ConstructorRef{publicstaticvoidprintName(Stringname,PersonBuilderbuilder){System.out.println(builder.buildPerson(name).getName()); }publicstaticvoidmain(String[]args){printName("赵丽颖",Person::new); }}

数组的构造器引用

Lambda表达式: length->newint[length]

方法引用: int[]::new

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。