Stream流

本文介绍了JavaStream流的基础概念、操作方法(如过滤、截取、映射等)、终结方法以及如何与Lambda表达式配合使用。通过实例演示了如何运用Stream流对集合进行高效处理,包括Optional类的应用和收集操作。
摘要由CSDN通过智能技术生成

Stream流

stream流的作用:

  • 针对集合进行功能简化开发
  • stream流通常需要和Lambda表达式一起使用

stream流的思想:

  • 以流水线的形式处理集合里面的数据

stream流的三类方法

获取Stream流

  • 单列集合
    • 可以使用Collection接口中的默认方法stream()获取
    • default Stream< E > stream()
  • 双列集合
    • 间接的生成流
    • 可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流
  • 数组
    • Arrays的静态方法Stream()获取
  • 多个同一类型的元素
    • 使用Stream流中的静态方法of,可以把多个同一种类型的元素封装成Stream流对象
    • static< T > Stream< T > of(T… values)

中间方法

方法解释
Stream< T > filter(Predicate predicate)用于对流中的数据进行过滤
Stream< T > limit(long maxSize)截取指定参数个数的数据
Stream< T > skip(long n)跳过指定参数个数的数据
static< T > Stream< T > concat(Stream a, Stream b)合并a和b两个流为一个流
Stream< T > distinct()去除流中重复的元素,依赖(hashCode和equals方法)
< R > Stream < R > map(Function< ? super T, ? extends R > mapper)将流中的元素类型进行转换
Stream< T > sorted()将流中元素按照自然排序的规则排序
Stream< T > sorted(Comparator< ? super T > comparator)将流中元素按照自定义比较器规则排序

终结方法

方法解释
void forEach(Consumer action)对此流的每个元素执行操作
Optional< T > min(Comparator< ? super T > comparator)根据提供的Comparator返回此流的最小值
Optional< T > max(Comparator< ? super T > comparator)根据提供的Comparator返回此流的最大值
long count()返回此流中的元素数

注意:在流对象使用了终结方法后,就表示流关闭了(无法继续使用)

Stream流的收集操作

Stream流的收集方法

方法解释
R collect(Collector collector)此方法只负责收集流中的数据,创建集合添加数据动作需要依赖于参数
< A > A[] toArray(IntFunction < A > generator)把Stream流中的数据存储到指定类型的数组中并返回

工具类Collectors提供了具体的收集方式

方法解释
public static < T > Collector toList()把元素收集到List集合中
public static < T > Collector toSet()把元素收集到Set集合中
public static < T > Collector toMap(Function keyMapper, Function valueMapper)把元素收集到Map集合中

综合案例练习

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// Person类
class Person {
    private String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

public class Demo1 {
    public static void main(String[] args) {
        ArrayList<String> al1 = new ArrayList<>();
        ArrayList<String> al2 = new ArrayList<>();
        ArrayList<Person> personArr = new ArrayList<>();

        Collections.addAll(al1, "悄悄那", "看看类", "明明", "贝贝仙", "乐乐妈", "牛牛");
        Collections.addAll(al2, "张三丰", "张利豪", "贝尔", "雷霆", "张宇", "芊芊");

        // 第一个队伍需要名字为3个字的成员姓名,并且只要前三个人
        Stream<String> stream1 = al1.stream();
        Stream<String> rel1 = stream1.filter(name -> name.length() == 3).limit(3);

        // 第二个队伍只要姓张的成员姓名,并且筛选之后不要前2个人
        Stream<String> stream2 = al2.stream();
        Stream<String> rel2 = stream2.filter(name -> name.startsWith("张")).skip(2);

        // 将两个队伍合并为一个队伍
        Stream<String> result = Stream.concat(rel1, rel2);

        // 根据姓名创建Person对象
        Stream<Person> personStream = result.map(obj -> new Person(obj));

        // 将流中的数据收集到List集合
        List<Person> list = personStream.collect(Collectors.toList());
        // 输出List集合中Person对象的信息
        System.out.println(list.toString());
    }
}

Optional类

介绍

  • 可能包含或不包含非空值的容器对象。如果一个值存在,isPresent()将返回true和get()将返回值
  • 使用Optional可以简化非空判断操作

Optional类常用的功能

方法解释
public static < T > Optional < T > of(T value)通过非null值构建一个Optional容器,注意value不能不为null否则抛出异常
public static < T > Optional < T > ofNullable(T value)通过指定值构建一个Optional容器,如果值为null则返回Optional.empty
public T orElse(T other)返回值如果存在,否则返回other
public boolean isPresent()如果存在值,则返回true,否则为false
public T get()如果Optional中存在值,则返回值,否则抛出NoSuchElementExcetion
  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值