Java中Stream流的基本使用_java stream流使用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Stream流的体验

什么是Stream流?

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

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

例如下面的操作可以使用Stream流简化

创建一个集合存储多个字符串元素

public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    Collections.addAll(names, "张无忌", "周芷若", "赵敏", "张三丰", "张三");
}

把集合中所有以"张"开头的元素存储到一个新的集合

public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    Collections.addAll(names, "张无忌", "周芷若", "赵敏", "张三丰", "张三");

    List<String> newNames = new ArrayList<>();
    for (String name : names) {
        if (name.startsWith("张")) {
            newNames.add(name);
        }
    }
    System.out.println(newNames); // [张无忌, 张三丰, 张三]
}

把"张"开头的集合中的长度为3的元素存储到一个新的集合

public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    Collections.addAll(names, "张无忌", "周芷若", "赵敏", "张三丰", "张三");

    List<String> newNames = new ArrayList<>();
    for (String name : names) {
        if (name.startsWith("张")) {
            newNames.add(name);
        }
    }

    List<String> newNames2 = new ArrayList<>();
    for (String newName : newNames) {
        if (newName.length() == 3) {
            newNames2.add(newName);
        }
    }
    System.out.println(newNames2); // [张无忌, 张三丰]
}

Stream流的初体验, 简化上面代码:

  1. 使用Stream流可以链式调用
public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    Collections.addAll(names, "张无忌", "周芷若", "赵敏", "张三丰", "张三");

    names.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
}
  1. 两个filter条件可以合并
public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    Collections.addAll(names, "张无忌", "周芷若", "赵敏", "张三丰", "张三");

    names.stream().filter(s -> s.startsWith("张") && s.length() == 3).forEach(s -> System.out.println(s));
}

Stream流式思想的核心:

先得到集合或者数组的Stream流就是类似一根传送带

把元素放上去, 然后就用这个Stream流简化过的API来方便的操作元素

Stream流的获取

sream流的三类方法:

  1. 获取Stream流

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

  1. 中间方法

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

  1. 终结方法

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

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


集合获取Stream流的方式:

  1. Collection集合获取Stream流的方式

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

名称说明
stream()获取当前集合对象的Stream流
public static void main(String[] args) {
    // Collection集合获取Stream流的方式
    Collection<String> list = new ArrayList<>();
    Stream<String> s = list.stream();
}
  1. Map集合获取Stream流的方式

Map集合获取Stream流: 可以分别获取键的Stream流和值的Stream流, 也可以获取键值对流

public static void main(String[] args) {
    // Map集合获取Stream流的方式
    Map<String, Integer> maps = new HashMap<>();
    // 键流
    Stream<String> keyS = maps.keySet().stream();
    // 值流
    Stream<Integer> valueS = maps.values().stream();
    // 键值对流
    Stream<Map.Entry<String, Integer>> keyValue = maps.entrySet().stream();
}
  1. 数组获取Stream流的方式:
名称说明
stream(T[] array)获取当前数组的Stream流
of(T… values)获取当前数组/可变数据的Stream流
public static void main(String[] args) {
    // 获取数组的Stream流
    Integer[] arr = {10, 20, 30};
    // 方式一
    Stream<Integer> arrS1 = Arrays.stream(arr);
  	// 方式二
    Stream<Integer> arrS2 = Stream.of(arr);
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java