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】(10,int[]::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
read ECONNRESET at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20) { errno: -4077(代码片段