国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使代碼更簡潔(二)----集合轉(zhuǎn)換相關(guān)

meislzhua / 1950人閱讀

摘要:舉個例子,在開發(fā)通知中心時需要給用戶推送消息,安卓和是調(diào)用的不同的第三方庫,所以要根據(jù)設(shè)備的類型調(diào)用不同的方法。接著要獲得是的列表,是安卓的列表。

博客搬移到這里:http://yemengying.com/
有個自己的博客還蠻好玩的,bazinga!

記錄一下在工作開發(fā)中封裝的一些工具類,使代碼看起來更加的簡潔。這篇就記錄下和集合轉(zhuǎn)換相關(guān)的吧。。。。。會持續(xù)記錄。。。。

list轉(zhuǎn)map

開發(fā)過程中經(jīng)常會碰到需要將list轉(zhuǎn)為map的情況,例如有一個User類,有id,name,age等屬性。有一個User的list,為了很方便的獲取指定id的User,這時就需要將List< User>轉(zhuǎn)換為Map,其中map的key是User的id。
一般的做法,是通過for循環(huán)將list中的元素put到map中,代碼如下:

Map map = new HashMap();
for(User user : userList){
    map.put(user.getId(), user);
}

這樣做,在每個需要將list轉(zhuǎn)為map的地方,都要寫一遍for循環(huán),代碼不夠簡潔,所以利用stream和泛型封裝了一個通用的工具方法

public class TransFormUtils {
    
    /**
     * 將list轉(zhuǎn)為map
     * @param list
     * @param predicate1  key
     * @param predicate2  value
     * @return
     */
    public static  Map transformToMap(List list,Function predicate1, Function predicate2){
        return list.stream().collect(Collectors.toMap(predicate1, predicate2));
    }

}

這樣如果需要將List< User>轉(zhuǎn)為Map代碼如下

//省略list構(gòu)造過程
Map map = TransFormUtils.transformToMap(userList, p->p.getId(), p->p);

如果需要將List< User>轉(zhuǎn)為Map代碼如下

//省略list構(gòu)造過程
Map map2 = TransFormUtils.transformToMap(userList, p->p.getId(), p->p.getName());

應(yīng)用封裝好的工具類 只需要一行代碼就可以完成list到map的轉(zhuǎn)換,程序簡單了許多~~

list< T >轉(zhuǎn)map< K,List< V>>

將開發(fā)中經(jīng)常需要根據(jù)list中的某個屬性將list分類。舉個例子,在開發(fā)通知中心時需要給用戶推送消息,安卓和ios是調(diào)用的不同的第三方庫,所以要根據(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。
為了解決這個問題,寫了一個通用的工具類。
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())));
    }

}

使用如下:

List list = new ArrayList();
//省略list的構(gòu)造
Map> deviceMap = TransFormUtils.transformToMapList(list, p->p.getDeviceType(), p->p.getDeviceId());

2.普通方法
同事也寫了一個另一個工具類,這種方法定義了一個新的數(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();
    }
}

使用如下

List list = new ArrayList();
//省略list的構(gòu)造
MapList> deviceMap = new MapList>();
for(DeviceUser device : list){
 deviceMap.put(device.getDeviceType(),device.getDeviceId());
}

還是喜歡第一種哈哈哈哈哈哈~~
題外話:既然對現(xiàn)狀不滿意 就嘗試改變吧 雖然有可能進入另一個坑~~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64512.html

相關(guān)文章

  • 使代碼簡潔(一)---List相關(guān)

    摘要:就如同一個迭代器,單向,不可往復,數(shù)據(jù)只能遍歷一次,遍歷過一次后即用盡了,就好比流水從面前流過,一去不復返。而和迭代器又不同的是,可以并行化操作,迭代器只能命令式地串行化操作。 博客搬移到這里:http://yemengying.com/有個自己的博客還蠻好玩的,bazinga! 記錄一下在工作開發(fā)中封裝的一些工具類,使代碼看起來更加的簡潔。這篇就記錄下和list相關(guān)的吧。。。。。會持...

    lpjustdoit 評論0 收藏0
  • JavaScript中的函數(shù)式編程(翻譯)

    摘要:原文鏈接原文作者函數(shù)式編程這篇文章是介紹函數(shù)式編程的四篇文章中的第二篇。這些部分被使用的越來越頻繁,人們把他們放到一個函數(shù)式編程的庫里面,有一些流行的庫包括未亡待續(xù)閱讀下一節(jié)原文地址歡迎關(guān)注 showImg(https://segmentfault.com/img/bVtSez); tips 原文鏈接: http://jrsinclair.com/articles/2016/gentl...

    smartlion 評論0 收藏0
  • Java 8 vs. Scala():Stream vs. Collection

    摘要:比如對一個數(shù)據(jù)流進行過濾映射以及求和運算,通過使用延后機制,那么所有操作只要遍歷一次,從而減少中間調(diào)用。這里需知道中的元素都是延遲計算的,正因為此,能夠計算無限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達式對比。在本文,將進行 Hussachai Puripunpinyo Java 和 Scala 對比三部曲的第二部分,主要關(guān)注 Stream...

    GeekGhc 評論0 收藏0
  • JavaWEB開發(fā)14——ajax

    摘要:一概述什么是同步,什么是異步同步現(xiàn)象客戶端發(fā)送請求到服務(wù)器端,當服務(wù)器返回響應(yīng)之前,客戶端都處于等待卡死狀態(tài)異步現(xiàn)象客戶端發(fā)送請求到服務(wù)器端,無論服務(wù)器是否返回響應(yīng),客戶端都可以隨意做其他事情,不會被卡死的運行原理頁面發(fā)起請求,會將請求發(fā)送 一、Ajax概述1.什么是同步,什么是異步同步現(xiàn)象:客戶端發(fā)送請求到服務(wù)器端,當服務(wù)器返回響應(yīng)之前,客戶端都處于等待 卡死狀態(tài)異步現(xiàn)象:客戶...

    yearsj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<