Java中Stream流的基本使用

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

猜你喜欢

转载自blog.csdn.net/m0_71485750/article/details/127491774