介绍

"Stream流"通常指的是数据流(Data Stream),在计算机科学中是指一系列连续的数据元素,以流的形式传输。数据流可以是输入数据流(Input Stream)或输出数据流(Output Stream),常见的应用包括网络数据传输、文件读写操作等。在编程中,利用流的概念可以方便地处理大量的数据,实现数据的分块传输和处理。

alt alt Stream流

流水线

先得到流水线 把数据都放上面去

在利用stream流中的API进行操作

alt

使用stream流

alt

用集合去调用stream()方法

获得流水线 并把集合里面的数据放到流水线上

alt

我们这边是使用链式编程的思想 alt

双列集合

alt

数组

alt

零散数据

alt

Stream流里的静态方法of

方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组

但是数组必须是引用数据类型

如果传递基本数据类型,是会把整个数组当做一个元素放到Stream里

我们要做的是把数据放到Stream流里

alt

中间方法

alt 过滤 alt alt *

注意

stream流关闭后不可再使用

所以优先使用链式编程的思想

alt

获取前几个元素 alt

跳过前几个元素 alt

实例操作

import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周正若","赵敏","张强",
                                          "张三丰","张翠山","张良","王二麻子","谢广坤");
        list.stream()
                .skip(3)
                .filter(s ->s.startsWith("张"))
                .forEach(s -> System.out.println(s));
        //"张强","张三丰","张翠山","张良"
    }
}
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周正若","赵敏","张强",
                                          "张三丰","张翠山","张良","王二麻子","谢广坤");
        list.stream()
                .skip(3)
                .limit(4)
                .forEach(s -> System.out.println(s));
        //"张强","张三丰","张翠山","张良"
    }
}

去重

alt

合并

alt

转换流里面的数据类型

如图使用map方法

当map方法执行完毕之后,流上的数据就变成了整数

所以在下面的forEach当中

s依次表示流里面的每一个数据

alt

上述代码等价于

alt

终结方法

alt

终结方法是流里面的最后一步

之后就不能在使用流里面的其他方法了

alt

上述代码等价于 alt

收集方法Collect

收集流中的数据,放到集合中

alt

import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌-男-25",
                "周正若-女-14","赵敏-女-13","张强-男-20");

        List<String> man=list.stream()
                .filter(s ->"男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(man);

        Set<String> woman=list.stream()
                .filter(s ->"女".equals(s.split("-")[1]))
                .collect(Collectors.toSet());

    }
}

搜集到HashSet集合里面时

会去掉重复的元素

收集使用了collect这个方法

当收集到Map双列集合里的时候

键和值的规则要分别书写 altaltalt

alt 收集到Map集合中,键是不能重复的

不然就会报错

完整版

alt alt alt

转换成Lambda表达式

import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌-男-25",
                "周正若-女-14","赵敏-女-13","张强-男-20");

        Map<String,Integer>map=list.stream()
                .filter(s ->"男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s ->s.split("-")[0],
                        s ->Integer.parseInt(s.split("-")[2])));
        System.out.println(map);

    }
}

总结

alt