国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8中利用stream對map集合進行過濾的方法

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

2021-05-21 11:01陽光溫暖 Java教程

這篇文章主要給大家介紹了關于Java8中利用stream對map集合進行過濾的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

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

原有方法說明

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

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

這里我簡單畫了個圖,對這個過程總結

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

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

2.利用map進行對于stream中包含的元素使用給定的轉換函數進行轉換操作

3.collect進行聚合成map

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

自定義map工具類處理方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//這里的代碼和原先的代碼相比做了修改,去掉了map進行對于stream中包含的元素使用給定的轉換函數進行轉換操作
 
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;
 }

測試下

?
1
2
3
4
5
6
7
8
9
10
11
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));
}

輸出結果

{c=c}
null

優化parsemapforfilter 方法,加入optional類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
 }

是不是感覺更清晰了呢?

測試一下

?
1
2
3
4
5
6
7
8
9
10
11
12
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));
}

結果

?
1
2
3
4
5
6
7
8
{c=c}
null
優化checkvalue方法
 private static boolean checkvaluebyoptional(object object) {
 return (boolean) optional.ofnullable(object)
  .filter((e) -> e instanceof string && e.equals("") ? false : true)
  .orelse(false);
 }

總結

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

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

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

原文鏈接:https://www.cnblogs.com/zhenghengbin/p/9387547.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费xxxxx在线视频软件 | 亚洲国产精品久久久久婷婷老年 | 精品亚洲永久免费精品 | 伊人久久综合 | www.日韩在线观看 | 一区二区三区精品视频免费看 | 2019国产精品 | 韩国毛片在线观看 | 久久人人爽人人爽人人片亚洲 | 国产一区二区三区久久久久久久久 | 99在线播放 | 久久久久久亚洲 | 婷婷久久五月 | 伊人99综合 | 中文字幕免费中文 | 99精品欧美一区二区三区 | 少妇精品久久久久久久久久 | 国产一区精品视频 | 日韩在线成人 | 国产美女精品视频免费观看 | 成人午夜精品一区二区三区 | 国产精品久久久久久久久 | www国产精品 | 国产成人一区 | 国产噜噜噜噜噜久久久久久久久 | 国产精品久久久久久久 | 日韩成人精品 | 五月天一区二区 | 久久久精品在线观看 | 中文字幕一区二区三区日韩精品 | 黄色片网站免费观看 | 中文字幕视频在线 | 欧美日韩成人精品 | 日韩视频一区二区 | 免费成人av在线 | 国内精品久久久久久 | 精品国产91| 日日操av | 国内精品一区二区 | 岛国一区 | 亚洲综合国产 |