Java Stream流知識(shí)總結(jié)
說(shuō)明
在Java 8中,得益于Lambda所帶來(lái)的函數(shù)式編程,引入了一個(gè)全新的Stream概念,用于解決已有集合類庫(kù)既有的弊端
遍歷
傳統(tǒng)集合在于使用循環(huán)遍歷
Java 8的Lambda讓我們可以更加專注于做什么(What),而不是怎么做(How),這點(diǎn)此前已經(jīng)結(jié)合內(nèi)部類進(jìn)行 了對(duì)比說(shuō)明。現(xiàn)在,我們仔細(xì)體會(huì)一下上例代碼,可以發(fā)現(xiàn):
for循環(huán)的語(yǔ)法就是“怎么做” for循環(huán)的循環(huán)體才是“做什么”傳統(tǒng)集合遍歷
import java.util.ArrayList;import java.util.List;/** * @author tanglei * @date 2020/6/10 10:21 下午 */public class NormalFilter { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add('張無(wú)忌'); list.add('周芷若'); list.add('趙敏'); list.add('張強(qiáng)'); list.add('張三豐'); List<String> zhangList = new ArrayList<>(); for(String name : list){ if(name.startsWith('張')){ zhangList.add(name); } } List<String> shortList = new ArrayList<>(); for(String name : zhangList){ if(name.length() == 3){ shortList.add(name); } } for (String name : shortList){ System.out.println(name); } }}
Stream的優(yōu)雅
import java.util.ArrayList;import java.util.List;/** * @author tanglei * @date 2020/6/10 10:28 下午 */public class StreamFilter { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add('張無(wú)忌'); list.add('周芷若'); list.add('趙敏'); list.add('張強(qiáng)'); list.add('張三豐'); list.stream() .filter(s -> s.startsWith('張')) .filter(s -> s.length() == 3) .forEach(System.out::println); }}
Stream的優(yōu)雅使用stream可以十分簡(jiǎn)單明了的體現(xiàn)代碼的邏輯
“Stream流”其實(shí)是一個(gè)集合元素的函數(shù)模型,它并不是集合,也不是數(shù)據(jù)結(jié)構(gòu),其本身并不存儲(chǔ)任何 元素(或其地址值
獲取流
所有的 Collection 集合都可以通過(guò) stream 默認(rèn)方法獲取流; Stream 接口的靜態(tài)方法 of 可以獲取數(shù)組對(duì)應(yīng)的流。根據(jù)Collection獲取流
public static void main(String[] args) {List<String> list = new ArrayList<>();Stream<String> stream1 = list.stream();Set<String> set = new HashSet<>();Stream<String> stream2 = set.stream();Vector<String> vector = new Vector<>();}
根據(jù)Map獲取流
public static void main(String[] args) {Map<String, String> map = new HashMap<>();Stream<String> keyStream = map.keySet().stream();Stream<String> valueStream = map.values().stream(); Stream<Map.Entry<String, String>> entryStream = map.entrySet().stream();}
根據(jù)數(shù)組獲取流
public static void main(String[] args) {String[] array = { '張無(wú)忌', '張翠山', '張三豐', '張一元' };Stream<String> stream = Stream.of(array); }
常用方法
逐一處理:forEach會(huì)將每一個(gè)流元素交給該函數(shù)進(jìn)行處理
public static void main(String[] args) {Stream<String> stream = Stream.of('張無(wú)忌', '張三豐', '周芷若');stream.forEach(name?> System.out.println(name)); }
過(guò)濾:filter可以通過(guò) filter 方法將一個(gè)流轉(zhuǎn)換成另一個(gè)子集流
public static void main(String[] args) {Stream<String> original = Stream.of('張無(wú)忌', '張三豐', '周芷若');Stream<String> result = original.filter(s ?> s.startsWith('張')); }
映射:map如果需要將流中的元素映射到另一個(gè)流中
public static void main(String[] args) {Stream<String> original = Stream.of('10', '12', '18');Stream<Integer> result = original.map(str?>Integer.parseInt(str)); }
統(tǒng)計(jì)個(gè)數(shù):count數(shù)一數(shù)其中的元素個(gè)數(shù)
public static void main(String[] args) {Stream<String> original = Stream.of('張無(wú)忌', '張三豐', '周芷若'); Stream<String> result = original.filter(s ?> s.startsWith('張')); System.out.println(result.count()); // 2}
取用前幾個(gè):limit可以對(duì)流進(jìn)行截取,只取用前n個(gè)
public static void main(String[] args) {Stream<String> original = Stream.of('張無(wú)忌', '張三豐', '周芷若'); Stream<String> result = original.limit(2); System.out.println(result.count()); // 2}
跳過(guò)前幾個(gè):skip如果希望跳過(guò)前幾個(gè)元素
public static void main(String[] args) {Stream<String> original = Stream.of('張無(wú)忌', '張三豐', '周芷若'); Stream<String> result = original.skip(2); System.out.println(result.count()); // 1}
組合:concat如果有兩個(gè)流,希望合并成為一個(gè)流
public static void main(String[] args) {Stream<String> streamA = Stream.of('張無(wú)忌'); Stream<String> streamB = Stream.of('張翠山'); Stream<String> result = Stream.concat(streamA, streamB);}
感謝
黑馬程序員
以及勤勞的自己
以上就是Java Stream流知識(shí)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java Stream流的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 詳解Vue中Axios封裝API接口的思路及方法2. 通過(guò)工廠模式返回Spring Bean方法解析3. 關(guān)于Mysql-connector-java驅(qū)動(dòng)版本問(wèn)題總結(jié)4. JSP實(shí)現(xiàn)客戶信息管理系統(tǒng)5. SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導(dǎo)出,在線文件導(dǎo)出)6. python:刪除離群值操作(每一行為一類數(shù)據(jù))7. python 批量下載bilibili視頻的gui程序8. 使用css實(shí)現(xiàn)全兼容tooltip提示框9. CSS自定義滾動(dòng)條樣式案例詳解10. python中HTMLParser模塊知識(shí)點(diǎn)總結(jié)
