最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8中利用stream對map集合進行過濾的方法

 更新時間:2018年07月30日 11:07:05   作者:陽光溫暖  
這篇文章主要給大家介紹了關(guān)于Java8中利用stream對map集合進行過濾的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

Stream 是用函數(shù)式編程方式在集合類上進行復雜操作的工具,其集成了Java 8中的眾多新特性之一的聚合操作,開發(fā)者可以更容易地使用Lambda表達式,并且更方便地實現(xiàn)對集合的查找、遍歷、過濾以及常見計算等。

最近公司在大張旗鼓的進行代碼審核,從中也發(fā)現(xiàn)自己寫代碼的不好習慣。一次無意的點到了公司封裝的對map集合過濾的方法,發(fā)現(xiàn)了stream。于是研究了一下。并對原有的代碼再次結(jié)合Optional進行重構(gòu)下

原有方法說明

主要處理過濾條件Map對象,過濾掉了null和空字符串 等操作

這里我簡單畫了個圖,對這個過程總結(jié)

1.利用filter對null和空字符串進行過濾

2.利用map進行對于Stream中包含的元素使用給定的轉(zhuǎn)換函數(shù)進行轉(zhuǎn)換操作

3.collect進行聚合成map

由于公司的代碼不合適自己展示,我這里自己仿照公司的寫了個類似的簡單方法,然后一步一步優(yōu)化

自定義map工具類處理方法

//這里的代碼和原先的代碼相比做了修改,去掉了map進行對于Stream中包含的元素使用給定的轉(zhuǎn)換函數(shù)進行轉(zhuǎn)換操作

public static Map<String, Object> parseMapForFilter(Map<String, Object> map) {
 if (map == null) {
  return null;
 } else {
  map = map.entrySet().stream()
   .filter((e) -> checkValue(e.getValue()))
   .collect(Collectors.toMap(
    (e) -> (String) e.getKey(),
    (e) -> e.getValue()
   ));
 }
 return map;
 }
 
private static boolean checkValue(Object object) {

 if (object instanceof String && "".equals(object)) {
  return false;
 }

 if (null == object) {
  return false;
 }

 return true;
 }

測試下

 public static void main(String[] args) {
 Map<String,Object> params = new HashMap<>(16);

 params.put("a","");
 params.put("b",null);
 params.put("c","c");

 params = MapUtil.parseMapForFilter(params);
 System.out.println(params);
 System.out.println(MapUtil.parseMapForFilter(null));
 }

輸出結(jié)果

{c=c}
null

優(yōu)化parseMapForFilter 方法,加入Optional類

public static Map<String, Object> parseMapForFilterByOptional(Map<String, Object> map) {

 return Optional.ofNullable(map).map(
  (v) -> {
   Map params = v.entrySet().stream()
    .filter((e) -> checkValue(e.getValue()))
    .collect(Collectors.toMap(
     (e) -> (String) e.getKey(),
     (e) -> e.getValue()
    ));

   return params;
  }
 ).orElse(null);
 }

是不是感覺更清晰了呢?

測試一下

 public static void main(String[] args) {
 Map<String, Object> params = new HashMap<>(16);

 params.put("a", "");
 params.put("b", null);
 params.put("c", "c");

 params = MapUtil.parseMapForFilterByOptional(params);

 System.out.println(params);
 System.out.println(MapUtil.parseMapForFilterByOptional(null));
 }

結(jié)果

{c=c}
null
優(yōu)化checkValue方法
 private static boolean checkValueByOptional(Object object) {
 return (Boolean) Optional.ofNullable(object)
  .filter((e) -> e instanceof String && e.equals("") ? false : true)
  .orElse(false);
 }

總結(jié)

大家是不是感覺lambda 寫法更加簡單明了,不再充滿著if判斷。但如果大家首寫的時候,肯定感覺不習慣,我剛開始寫的時候,也是很別扭,根本不知道怎么寫。一點點去嘗試。更多細節(jié)基礎的問題這里不再敘述。

只是感覺這個對map的處理還是很好的。并且實際工作中用到的地方比較多。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

澎湖县| 曲麻莱县| 乌拉特前旗| 兴安县| 英吉沙县| 古丈县| 衡南县| 台湾省| 西宁市| 陆川县| 武川县| 封丘县| 新和县| 松潘县| 洮南市| 饶河县| 玉山县| 凤冈县| 台东市| 棋牌| 晋中市| 临泉县| 宁德市| 广南县| 华蓥市| 都匀市| 山西省| 靖州| 大关县| 巴东县| 七台河市| 积石山| 东安县| 宜兴市| 那曲县| 庆元县| 福海县| 宝鸡市| 伊金霍洛旗| 太和县| 钦州市|