如何在java 8 map中使用stream
簡(jiǎn)介
Map是java中非常常用的一個(gè)集合類(lèi)型,我們通常也需要去遍歷Map去獲取某些值,java 8引入了Stream的概念,那么我們?cè)趺丛贛ap中使用Stream呢?
基本概念
Map有key,value還有表示key,value整體的Entry。
創(chuàng)建一個(gè)Map:
Map<String, String> someMap = new HashMap<>();
獲取Map的entrySet:
Set<Map.Entry<String, String>> entries = someMap.entrySet();
獲取map的key:
Set<String> keySet = someMap.keySet();
獲取map的value:
Collection<String> values = someMap.values();
上面我們可以看到有這樣幾個(gè)集合:Map,Set,Collection。
除了Map沒(méi)有stream,其他兩個(gè)都有stream方法:
Stream<Map.Entry<String, String>> entriesStream = entries.stream();
Stream<String> valuesStream = values.stream();
Stream<String> keysStream = keySet.stream();
我們可以通過(guò)其他幾個(gè)stream來(lái)遍歷map。
使用Stream獲取map的key
我們先給map添加幾個(gè)值:
someMap.put("jack","20");
someMap.put("bill","35");
上面我們添加了name和age字段。
如果我們想查找age=20的key,則可以這樣做:
Optional<String> optionalName = someMap.entrySet().stream() .filter(e -> "20".equals(e.getValue())) .map(Map.Entry::getKey) .findFirst(); log.info(optionalName.get());
因?yàn)榉祷氐氖荗ptional,如果值不存在的情況下,我們也可以處理:
optionalName = someMap.entrySet().stream() .filter(e -> "Non ages".equals(e.getValue())) .map(Map.Entry::getKey).findFirst(); log.info("{}",optionalName.isPresent());
上面的例子我們通過(guò)調(diào)用isPresent來(lái)判斷age是否存在。
如果有多個(gè)值,我們可以這樣寫(xiě):
someMap.put("alice","20"); List<String> listnames = someMap.entrySet().stream() .filter(e -> e.getValue().equals("20")) .map(Map.Entry::getKey) .collect(Collectors.toList()); log.info("{}",listnames);
上面我們調(diào)用了collect(Collectors.toList())將值轉(zhuǎn)成了List。
使用stream獲取map的value
上面我們獲取的map的key,同樣的我們也可以獲取map的value:
List<String> listAges = someMap.entrySet().stream() .filter(e -> e.getKey().equals("alice")) .map(Map.Entry::getValue) .collect(Collectors.toList()); log.info("{}",listAges);
上面我們匹配了key值是alice的value。
總結(jié)
Stream是一個(gè)非常強(qiáng)大的功能,通過(guò)和map相結(jié)合,我們可以更加簡(jiǎn)單的操作map對(duì)象。
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-formap
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java 8 Stream 的終極技巧——Collectors 功能與操作方法詳解
- JDK12的新特性之teeing collectors
- Java9 Stream Collectors新增功能(小結(jié))
- 如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯
- 基于Java8 Stream API實(shí)現(xiàn)數(shù)據(jù)抽取收集
- java8 stream自定義分組求和并排序的實(shí)現(xiàn)
- JAVA8 STREAM COLLECT GROUPBY分組實(shí)例解析
- Java8 Stream Collectors收集器使用方法解析
相關(guān)文章
Java編程線程同步工具Exchanger的使用實(shí)例解析
這篇文章主要介紹了Java編程線程同步工具Exchanger的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Java鏈表的天然遞歸結(jié)構(gòu)性質(zhì)圖文與實(shí)例分析
這篇文章主要介紹了Java鏈表的天然遞歸結(jié)構(gòu)性質(zhì),結(jié)合圖文與實(shí)例形式分析了java鏈表中遞歸操作的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-03-03Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例詳解
這篇文章主要介紹了Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例,簡(jiǎn)單描述了裝飾者模式的概念、原理及Java使用裝飾者模式的相關(guān)實(shí)現(xiàn)步驟、操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05tio-boot?jfinal-plugins框架整合redis示例詳解
這篇文章主要為大家介紹了tio-boot?jfinal-plugins框架整合redis示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢(xún)功能
今天小編教大家如何通過(guò)ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢(xún)功能,首先大家需要新建一個(gè)maven工程引入jar包,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06在Spring?MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法
在Spring?MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來(lái)定義全局異常處理器類(lèi),并使用?@ExceptionHandler注解來(lái)定義處理特定異常的方法,本文就給大家介紹了Spring?MVC?@ControllerAdvice創(chuàng)建處理器的方法,需要的朋友可以參考下2023-08-08Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫(kù)
這篇文章主要介紹了在java的基礎(chǔ)上學(xué)習(xí)上傳Excel文件并導(dǎo)出到數(shù)據(jù)庫(kù),感興趣的小伙伴不要錯(cuò)過(guò)奧2021-09-09Idea如何使用Fast Request接口調(diào)試
這篇文章主要介紹了Idea如何使用Fast Request接口調(diào)試問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11