如何在java 8 map中使用stream
簡介
Map是java中非常常用的一個(gè)集合類型,我們通常也需要去遍歷Map去獲取某些值,java 8引入了Stream的概念,那么我們怎么在Map中使用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沒有stream,其他兩個(gè)都有stream方法:
Stream<Map.Entry<String, String>> entriesStream = entries.stream();Stream<String> valuesStream = values.stream();Stream<String> keysStream = keySet.stream();
我們可以通過其他幾個(gè)stream來遍歷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());
上面的例子我們通過調(diào)用isPresent來判斷age是否存在。
如果有多個(gè)值,我們可以這樣寫:
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)大的功能,通過和map相結(jié)合,我們可以更加簡單的操作map對(duì)象。
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-formap
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. asp讀取xml文件和記數(shù)2. asp批量添加修改刪除操作示例代碼3. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁的方法4. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問題……5. CSS可以做的幾個(gè)令你嘆為觀止的實(shí)例分享6. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera7. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案8. CSS3中Transition屬性詳解以及示例分享9. html小技巧之td,div標(biāo)簽里內(nèi)容不換行10. 告別AJAX實(shí)現(xiàn)無刷新提交表單
