stream流及方法引用

Posted arroa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stream流及方法引用相关的知识,希望对你有一定的参考价值。

Stream 【只能使用一次,使用后就关闭了】

获取流的两种方式

1.所有Collection集合都可通过stream默认方式获取流

default Strea<E> stream ()

2.Stream接口的静态方法of可以获取对应的流。

static <T> Stream<T> of(T... values) 【参数为可变参,就可以传递一个数组】

常用方法

延迟方法:返回值类型仍然是Stream接口自身类型的方法,所以支持链式调用

Filter【过滤】Stream<T> filter(Predicate<? super T> predicate)  

map【映射】<R> Stream<R> map(Function<? super T,? extends R> mapper)

Limit【截取】Stream<T> limit(long maxSize)  截取前几个

Skip【跳过】Stream<T> skip(long n)      跳过前几个

concat【组合】static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

终结方法:返回值类型不再是Stream接口自身类型的方法。

forEach【遍历】void forEach(Consumer<? super T> action)

count【统计】long count()  

 

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

通过对象名来引用成员方法【对象必须存在,成员方法也要存在】

通过类名引用静态成员方法【类已经存在,静态成员方法也要存在】

通过Super引用成员方法

通过this引用本类成员方法

 

类的构造器引用:【类名称::new

数组的构造器引用:【数组类型::new】(10int[]::new

 

【筛选组合eg】

 

package edu.xupt.test1;

import java.util.ArrayList;
import java.util.stream.Stream;

public class Demo1 {
public static void main(String[] args) {
ArrayList<String> arr1 = new ArrayList<>();
arr1.add("迪丽热巴");
arr1.add("宋远桥");
arr1.add("苏星河");
arr1.add("石破天");
arr1.add("石中玉");
arr1.add("老子");
arr1.add("庄子");
arr1.add("洪七公");
Stream<String> stream1 = arr1.stream();
ArrayList<String> arr3 = new ArrayList<>();
stream1.filter(name->name.length()==3).limit(3).forEach(s ->arr3.add(s));

ArrayList<String> arr2 = new ArrayList<>();
arr2.add("古力娜扎");
arr2.add("张无忌");
arr2.add("赵丽颖");
arr2.add("张三丰");
arr2.add("尼古拉斯赵四");
arr2.add("张天爱");
arr2.add("张二狗");
Stream<String> stream2 = arr1.stream();
ArrayList<String> arr4 = new ArrayList<>();
stream2.filter(name->name.startsWith("张")).skip(2).forEach(s ->arr4.add(s));

Stream<String> concat = Stream.concat(stream1, stream2);


}
}

 

以上是关于stream流及方法引用的主要内容,如果未能解决你的问题,请参考以下文章

Java8新特性代码示例(附注释)- 方法引用,Optional, Stream

Java基础-Stream流方法引用篇

Java 8 Lambda 表达式和 Stream 操作

java 随机读写访问流及seek方法

详解JAVA8Stream 方法引用(基础){全}

read ECONNRESET at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20) { errno: -4077(代码片段