Stream

      在〈Stream〉中尚無留言

Stream 自 Java 8 開始支援,對 「資料集合」(Collection) 作 「管線式處理」 的工具。這對大資料有很多方便,不過也請別走火入魔,因為效能不會因此而提升。

目的

假設有一個類別 Member 如下

class Membert{
    public int age;
    public String name;
    public Member(int age, String name){
        this.age = age;
        this.name = name;
    }
}

然後使用如下收集數十萬,百萬個會員資料。

List<Member> users=new ArrayList<>();
users.add(new Member(18, "Thomas"));
..........

如果我們要將 age >=18 的會員名字收集起來,在 7版及之前的版本需使用如下

List<String> names=new ArrayList<>();
for (var u : users){
    if (u.age>=10){
names.add(u.name);
} }

若使用 7 版後的 Stream,可以精簡如下

List<String> names = users.stream()
        .filter(x->x.age>=18)
        .map(x->x.name)
        .toList();
System.out.println(names);

乍看之下,Stream 是為了把 for 迴圈拿掉,讓操作類似 Python 的 Numpy。其實這還真的是 Stream 的目地,少了 for 及 if,提高程式的可讀性。但效能上,二者的效能幾乎是一樣的。

三個核心

Stream 有三個核心概念,分別說明如下

資料來源

可以由 List.stream()、Arrays.stream(陣列) 及 Stream.of() 三種方法產生 Stream。

中介操作

有 filter、map、sorted、distinct、limit,會回傳新的 Stream,所以可以一直接。

終端操作

真正的執行,回傳結果。常看到的有 forEach、peek、toList、collect、count、findFirst、anyMatch。

資料來源

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *