java8什么是stream,Java8系列--Java Stream入門篇(什么是Stream)

1 知識框架

先上一張圖來說明一下Java8中”流”的引進、意義和優勢。

ac1e37c4a8c80476f96ef56e27ab5a31.png

2 傳統Java集合的不足

2.1 傳統Java集合

集合是Java中用途十分廣泛的一個集合,正是因為它對於數據的處理的優勢,幾乎任何一個Java應用程序都會設計對Java集合的制造和處理。

然而,一個傳統的Java集合僅僅是對Java集合內部的數據進行簡單的添加、刪除等操作,而且處理的數據類型有限。

當涉及到復雜的業務邏輯處理時,需要借助大量的迭代器才能完成需求,操作繁瑣,工作量大。

2.2 聲明式操作

我們熟悉的數據庫SQL操作。例如:

SELECT name FROM users WHERE age < 30

上面的SQL查詢語句可以選出年齡小於30歲的用戶的用戶名。

在這里,我們只需要顯式地聲明我們的需求”選出年齡小於30歲的用戶的用戶名”就可以了,而不需要考慮如何實現。

那么,Java集合如何實現這種顯式的聲明操作呢?

3 流是什么

3.1 實例講解

下面以一個實例展開講解,來更好地認識什么是”流”。

現在這里有若干鵝卵石,顏色、質量不等。

d458abcb012e9bec25a886d99abe1f71.png

3.1.1 需求

1.挑選出質量小於500g的鵝卵石,並2.按照質量從大到小的順序將它們排成一條線。

3.1.2 Java7(集合)實現

1.使用迭代器篩選元素

List stoneList = new ArrayList();

for (Stone s : stoneLine) {

if (s.getWeight() < 500) {

stoneList.add(s);

}

}

2.使用匿名類對鵝卵石進行質量排序(從大到小)

Collections.sort(stoneList, new Comparator() {

public int compare(Stone s1, Stone s2) {

return Integer.compare(s1.getWeight(), s2.getWeight());

}

});

3.將派好序的鵝卵石排成一條線(放到一起)

List lastStoneList = new ArrayList();

for (Stone s : stoneList) {

lastStoneList.add(s.getName());

}

}

3.1.3 Java8(Stream)實現

List lastStoneList =

stoneLine.stream()

.filter(s ->s.getWeight() < 500)//挑選出質量小於500g的鵝卵石

.sorted(comparing(Stone::getWeight))//按照質量進行排序

.map(Stone::getName)//提取滿足要求的鵝卵石的名字

.collect(toList());//將名字保存到List中

3.2 什么是流

流,是一系列數據項,它不是一種數據結構。

流可以進行相關的算法和計算,只是它並沒有顯式地表現,而是在內部進行隱式地操作。

4 流的優勢

流,解決了兩個問題,1.直接實現你”想要什么”,2.可以進行並行處理。

流,的本質,集合Lambda表達式,對傳統Java集合的功能強化。

Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。Stream API 借助於同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。同時它提供串行和並行兩種模式進行匯聚操作,並發模式能夠充分利用多核處理器的優勢,使用 fork/join 並行方式來拆分任務和加速處理過程。通常編寫並行代碼很難而且容易出錯, 但使用 Stream API 無需編寫一行多線程的代碼,就可以很方便地寫出高性能的並發程序。所以說,Java 8 中首次出現的 java.util.stream 是一個函數式語言+多核時代綜合影響的產物。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值