摘要:舉個(gè)例子,在開發(fā)通知中心時(shí)需要給用戶推送消息,安卓和是調(diào)用的不同的第三方庫(kù),所以要根據(jù)設(shè)備的類型調(diào)用不同的方法。接著要獲得是的列表,是安卓的列表。
博客搬移到這里:http://yemengying.com/
有個(gè)自己的博客還蠻好玩的,bazinga!
記錄一下在工作開發(fā)中封裝的一些工具類,使代碼看起來(lái)更加的簡(jiǎn)潔。這篇就記錄下和集合轉(zhuǎn)換相關(guān)的吧。。。。。會(huì)持續(xù)記錄。。。。
list轉(zhuǎn)map開發(fā)過(guò)程中經(jīng)常會(huì)碰到需要將list轉(zhuǎn)為map的情況,例如有一個(gè)User類,有id,name,age等屬性。有一個(gè)User的list,為了很方便的獲取指定id的User,這時(shí)就需要將List< User>轉(zhuǎn)換為Map
一般的做法,是通過(guò)for循環(huán)將list中的元素put到map中,代碼如下:
Mapmap = new HashMap (); for(User user : userList){ map.put(user.getId(), user); }
這樣做,在每個(gè)需要將list轉(zhuǎn)為map的地方,都要寫一遍for循環(huán),代碼不夠簡(jiǎn)潔,所以利用stream和泛型封裝了一個(gè)通用的工具方法
public class TransFormUtils { /** * 將list轉(zhuǎn)為map * @param list * @param predicate1 key * @param predicate2 value * @return */ public staticMap transformToMap(List list,Function predicate1, Function predicate2){ return list.stream().collect(Collectors.toMap(predicate1, predicate2)); } }
這樣如果需要將List< User>轉(zhuǎn)為Map
//省略list構(gòu)造過(guò)程 Mapmap = TransFormUtils.transformToMap(userList, p->p.getId(), p->p);
如果需要將List< User>轉(zhuǎn)為Map
//省略list構(gòu)造過(guò)程 Mapmap2 = TransFormUtils.transformToMap(userList, p->p.getId(), p->p.getName());
應(yīng)用封裝好的工具類 只需要一行代碼就可以完成list到map的轉(zhuǎn)換,程序簡(jiǎn)單了許多~~
list< T >轉(zhuǎn)map< K,List< V>>將開發(fā)中經(jīng)常需要根據(jù)list中的某個(gè)屬性將list分類。舉個(gè)例子,在開發(fā)通知中心時(shí)需要給用戶推送消息,安卓和ios是調(diào)用的不同的第三方庫(kù),所以要根據(jù)設(shè)備的類型調(diào)用不同的方法。首先根據(jù)要推送的用戶Id列表獲得List< DeviceUser>,DeviceUser類的屬性包括devicetype,deviceId,userId,userName,createAt等。接著要獲得deviceType是ios的deviceId列表,deviceType是安卓的deviceId列表。即將List< DeviceUser>轉(zhuǎn)為Map< Integer,List< String>>,其中map的key是deviceType,value是deviceId的list。
為了解決這個(gè)問題,寫了一個(gè)通用的工具類。
1.利用stream
public class TransFormUtils { /** * 將list轉(zhuǎn)為Map > * @param list * @param predicate1 map中的key * @param predicate2 map中的list的元素 * @return */ public static Map > transformToMapList(List list, Function predicate1, Function predicate2){ return list.stream().collect( Collectors.groupingBy(predicate1, Collectors.mapping(predicate2, Collectors.toList()))); } }
使用如下:
Listlist = new ArrayList (); //省略list的構(gòu)造 Map > deviceMap = TransFormUtils.transformToMapList(list, p->p.getDeviceType(), p->p.getDeviceId());
2.普通方法
同事也寫了一個(gè)另一個(gè)工具類,這種方法定義了一個(gè)新的數(shù)據(jù)結(jié)構(gòu),直接使用MapList代替Map
/** * Map&List組合數(shù)據(jù)結(jié)構(gòu) * * @author jianming.zhou * * @param* @param */ public class MapList { private Map > map = new HashMap >(); public List get(K k) { return map.get(k); } public void put(K k, V v) { if (map.containsKey(k)) { map.get(k).add(v); } else { List list = new ArrayList (); list.add(v); map.put(k, list); } } public Set keySet() { return map.keySet(); } }
使用如下
Listlist = new ArrayList (); //省略list的構(gòu)造 MapList > deviceMap = new MapList >(); for(DeviceUser device : list){ deviceMap.put(device.getDeviceType(),device.getDeviceId()); }
還是喜歡第一種哈哈哈哈哈哈~~
題外話:既然對(duì)現(xiàn)狀不滿意 就嘗試改變吧 雖然有可能進(jìn)入另一個(gè)坑~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64512.html
摘要:就如同一個(gè)迭代器,單向,不可往復(fù),數(shù)據(jù)只能遍歷一次,遍歷過(guò)一次后即用盡了,就好比流水從面前流過(guò),一去不復(fù)返。而和迭代器又不同的是,可以并行化操作,迭代器只能命令式地串行化操作。 博客搬移到這里:http://yemengying.com/有個(gè)自己的博客還蠻好玩的,bazinga! 記錄一下在工作開發(fā)中封裝的一些工具類,使代碼看起來(lái)更加的簡(jiǎn)潔。這篇就記錄下和list相關(guān)的吧。。。。。會(huì)持...
摘要:原文鏈接原文作者函數(shù)式編程這篇文章是介紹函數(shù)式編程的四篇文章中的第二篇。這些部分被使用的越來(lái)越頻繁,人們把他們放到一個(gè)函數(shù)式編程的庫(kù)里面,有一些流行的庫(kù)包括未亡待續(xù)閱讀下一節(jié)原文地址歡迎關(guān)注 showImg(https://segmentfault.com/img/bVtSez); tips 原文鏈接: http://jrsinclair.com/articles/2016/gentl...
摘要:比如對(duì)一個(gè)數(shù)據(jù)流進(jìn)行過(guò)濾映射以及求和運(yùn)算,通過(guò)使用延后機(jī)制,那么所有操作只要遍歷一次,從而減少中間調(diào)用。這里需知道中的元素都是延遲計(jì)算的,正因?yàn)榇?,能夠?jì)算無(wú)限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達(dá)式對(duì)比。在本文,將進(jìn)行 Hussachai Puripunpinyo Java 和 Scala 對(duì)比三部曲的第二部分,主要關(guān)注 Stream...
摘要:一概述什么是同步,什么是異步同步現(xiàn)象客戶端發(fā)送請(qǐng)求到服務(wù)器端,當(dāng)服務(wù)器返回響應(yīng)之前,客戶端都處于等待卡死狀態(tài)異步現(xiàn)象客戶端發(fā)送請(qǐng)求到服務(wù)器端,無(wú)論服務(wù)器是否返回響應(yīng),客戶端都可以隨意做其他事情,不會(huì)被卡死的運(yùn)行原理頁(yè)面發(fā)起請(qǐng)求,會(huì)將請(qǐng)求發(fā)送 一、Ajax概述1.什么是同步,什么是異步同步現(xiàn)象:客戶端發(fā)送請(qǐng)求到服務(wù)器端,當(dāng)服務(wù)器返回響應(yīng)之前,客戶端都處于等待 卡死狀態(tài)異步現(xiàn)象:客戶...
閱讀 1677·2021-11-12 10:35
閱讀 1619·2021-08-03 14:02
閱讀 2691·2019-08-30 15:55
閱讀 2033·2019-08-30 15:54
閱讀 768·2019-08-30 14:01
閱讀 2432·2019-08-29 17:07
閱讀 2259·2019-08-26 18:37
閱讀 3039·2019-08-26 16:51