复习(基础8)Stream流

目录

1、Stream流概述

1.1、什么是Stream流:

 1.2、Stream流思想:

1.3、案例:体验Stream流的作用:

2、Stream流的获取

2.1、集合获取Stream流的方式

2.2、数组获取Stream流的方式

2.3、Map集合获取Stream流的方式 

 2.3、Stream流的三类方法

3、Stream流的常用方法

3.1、Stream流的常用API(中间操作方法)

3.2、Stream流常见终结操作方法

4、Stream流的综合应用

5、收集Stream流


1、Stream流概述

1.1、什么是Stream流

        在Java 8中,得益于Lambda所带来的函数式编程, 引入了一个全新的Stream流概念。

        目的:用于简化集合和数组操作的API

 1.2、Stream流思想:

        Stream流式思想的核心

        1.先得到集合或者数组的Stream流(就是一根传送带)

        2.把元素放上去

        3.然后就用这个Stream流简化的API来方便的操作元素

1.3、案例:体验Stream流的作用:

package com.itwpf.day02_Stream;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        Stream<String> listStream = list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张") && s.length() == 3;
            }
        });
        List<String> collect = listStream.collect(Collectors.toList());
        System.out.println(collect);
    }
}


//输出:[张无忌, 张三丰]

2、Stream流的获取

Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能。

2.1、集合获取Stream流的方式

        可以使用Collection接口中的默认方法stream​()生成流

名称

说明

default Stream<E> stream​()

获取当前集合对象的Stream

        //Collection集合获取流
        Collection<String> list = new ArrayList<>();
        Stream<String> s1 = list.stream();

 

2.2、数组获取Stream流的方式

名称

说明

public static <T> Stream<T> stream(T[] array)

获取当前数组的Stream

public static<T> Stream<T> of(T... values)

获取当前数组/可变数据的Stream

        //数组获取流
        String[] names = {"张三", "李四", "王五"};
        Stream<String> streamnames1 = Arrays.stream(names);

        Stream<String> streamnames2 = Stream.of(names);

2.3、Map集合获取Stream流的方式 

        //Map集合获取流
        Map<String, Integer> map = new HashMap<>();
        //键流
        Stream<String> keyStream = map.keySet().stream();
        //值流
        Stream<Integer> valueStream = map.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> keyAndValueStream = map.entrySet().stream();

 2.3、Stream流的三类方法

        获取Stream

                创建一条流水线,并把数据放到流水线上准备进行操作

        中间方法

                流水线上的操作。一次操作完毕之后,还可以继续进行其他操作。

        终结方法

                一个Stream流只能有一个终结方法,是流水线上的最后一个操作

3、Stream流的常用方法

3.1、Stream流的常用API(中间操作方法)

名称

说明

Stream<T> filter(Predicate<? super T> predicate)

用于对流中的数据进行过滤。

Stream<T> limit​(long maxSize)

获取前几个元素

Stream<T> skip​(long n)

跳过前几个元素

Stream<T> distinct​()

去除流中重复的元素。依赖(hashCodeequals方法)

static <T> Stream<T> concat​(Stream a, Stream b)

合并ab两个流为一个流

 注意:

        中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。

        在Stream流中无法直接修改集合、数组中的数据。

3.2、Stream流常见终结操作方法

名称

说明

void forEach​(Consumer action)

对此流的每个元素执行遍历操作

long count​()

返回此流中的元素数

 注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream

4、Stream流的综合应用

案例:

需求:某个公司的开发部门,分为开发一部和二部,现在需要进行年中数据结算。

分析:

        ①:员工信息至少包含了(名称、性别、工资、奖金、处罚记录)

        ②开发一部有4个员工、开发二部有5名员工

        ③:分别筛选出2个部门的最高工资的员工信息,封装成优秀员工对象Topperformer

        ④:分别统计出2个部门的平均月收入,要求去掉最高和最低工资。

        ⑤:统计2个开发部门整体的平均工资,去掉最低和最高工资的平均值。

可以看看这一篇,解决了这个案例

Stream流案例_程序员胡默默的博客-CSDN博客_stream流案例

5、收集Stream流

Stream流的收集操作:

含义:就是把Stream流操作后的结果转回到集合或者数组中去。

Stream流:方便操作集合/数组的手段

集合/数组:才是开发中的目的。

Stream流的收集方法:

名称

说明

R collect​(Collector collector)

开始收集Stream流,指定收集器

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

名称

说明

public static <T> Collector toList​()

把元素收集到List集合中

public static <T> Collector toSet​()

把元素收集到Set集合中

public static  Collector toMap​(Function keyMapper , Function valueMapper)

把元素收集到Map集合中

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值