JDK8新特性(4)—— stream 流

一角殘葉發表於2020-12-02

1 對集合元素進行過濾

public class Demo01Stream {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("趙子龍");
        list.add("曹孟德");
        list.add("金毛獅王");
        list.add("令狐飛雪");
        list.add("曹小滿");

        list.stream().filter(name -> name.startsWith("曹"))
                .filter(name -> name.length() == 3)
                .forEach(name -> System.out.println(name));
    }
}

在這裡插入圖片描述

2 兩種獲取流的方法

java.util.stream.Stream<T> 是JDK8新加入的流介面(不是函式式介面),獲取流的方法:

  1. Collection 集合都可以通過 stream 預設方法獲取流;
  2. Stream 介面的靜態方法 of 可以獲取陣列對應的流。

  • Stream 流屬於管道流,只能被消費一次。第一個 Stream 流呼叫完畢,資料就會轉到下一個流上。此時第一個 stream 就會關閉,不能再呼叫方法了。

3 Stream 流中的常用方法

流模型的操作方法可以分為2種:

  1. 延遲方法:返回值型別仍然是 Stream 介面自身型別的方法,支援鏈式呼叫(除了終結方法外,其餘方法都是延遲方法)
  2. 終結方法:返回值型別不再是 Stream 介面自身型別的方法,比如 count ,forEach方法
    在這裡插入圖片描述

3.1 foreach

在這裡插入圖片描述

/**
 * @Description TODO
 * @Author tzb
 * @Date 2020/12/1 17:12
 * @Version 1.0
 **/
public class Demo02Stream_forEach {
    public static void main(String[] args) {
        // 獲取一個 Stream
        final Stream<String> stream = Stream.of("張三", "李四", "王五");

        stream.forEach(name -> System.out.println(name));
    }
}

3.2 filter

3.3 map

  • 將流中的元素對映到另一個流中
    在這裡插入圖片描述
  public static void main(String[] args) {
        // 獲取一個 Stream
        final Stream<String> stream = Stream.of("1", "2", "3", "4");

        stream
                .map(num -> Integer.parseInt(num))
                .forEach(num -> System.out.println(num));
    }

3.4 count

在這裡插入圖片描述

public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        final Stream<Integer> stream = list.stream();
        final long count = stream.count();
        System.out.println(count);
    }

3.5 limit

在這裡插入圖片描述

3.6 skip

在這裡插入圖片描述

3.7 concat

在這裡插入圖片描述

相關文章