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);

    }}

原文地址:https://www.cnblogs.com/arroa/p/12032253.html

时间: 2024-11-06 15:06:06

stream流及方法引用的相关文章

Stream流

Stream流 stream流,是在java8中,由lambda表达式所带来的一种新的函数是编程模式,可以用来解决一些已有的集合类型的弊端. 1.stream流与传统集合的便利方式的区别 传统遍历方式 1 public static void main(String[] args) { 2 //遍历输出名字中含有七的并且名字长度为3的人 3 List<String> list = List.of("乔七七","韩七岁","零零七",&

乐字节-Java8新特性-接口默认方法之Stream流(下)

接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 筛选和切片 filter(T -> boolean):保留 boolean 为 true 的元素 limit(long n):返回前 n 个元素 skip(long n):去除前 n 个元素 distinct():去除重复元素,这个方法是通过类的 equals 方法来判断两个元素是否相等的 映射 map

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

/** * java8中的函数式接口,java中规定:函数式接口必须只有一个抽象方法,可以有多个非抽象方法,同时,如果继承实现了 * Object中的方法,那么也是合法的 * <p> * 函数式接口可以使用lambda来创建 */ @FunctionalInterface interface MyService { void sayMessage(String msg); @Override boolean equals(Object obj); } /** * 入口 * @param arg

Java 8 (5) Stream 流 - 收集数据

在前面已经使用过collect终端操作了,主要是用来把Stream中的所有元素结合成一个List,在本章中,你会发现collect是一个归约操作,就像reduce一样可以接受各种做法作为参数,将流中的元素累计成一个汇总结果. 看这个例子:按照菜类进行分组 List<Dish> menu = Arrays.asList( new Dish("猪肉炖粉条", false, 800, Type.MEAT), new Dish("小炒牛肉", false, 70

009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用

一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法. 在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承,允许一个子类同时具有多个父类的接口与功能,在其他语言中,让一个类同时具有其他的可复用代码的方法叫做mixin.新的Java 8 的这个特新在编译器实现的角度上来说更

Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java

010-jdk1.8版本新特性二-Optional类,Stream流

1.5.Optional类 1.定义 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测. Optional 类的引入很好的解决空指针异常. 2.声明 以下是一个 java.util.Optional<T> 类的声明: public final class Option

java中的Stream流

java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端. 一.引言 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们需要对集合中的元 素进行操作的时候,除了必需的添加.删除.获取外,典型的就是集合遍历.

Java8 Stream流使用及其基本原理

Stream流,是对集合对象操作的增强 基本使用 比如有一个Person类的集合:List<Person> personList,可以通过stream()对集合中的元素进行操作, 下面的操作流程可以归纳为 过滤-映射-收集. List<Integer> personIdList = personList.stream() //选出年龄大于20的Person对象 .filter(person -> person.getAge() > 20) //将Person对象映射成为