激情久久久_欧美视频区_成人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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久免费综合视频 | 美女网站色免费 | 72pao成人国产永久免费视频 | 91av日韩| 欧美黑人伦理 | 在线播放免费视频 | 色视频91 | 999久久国产| 午夜视频在线免费观看 | 九九热免费视频在线观看 | 成人三级电影网站 | 国产电影精品久久 | 精品成人在线观看 | 久久里面有精品 | 蜜桃一本色道久久综合亚洲精品冫 | 亚洲小视频网站 | 91精品国产综合久久久欧美 | 在线91视频 | 国产美女视频一区二区三区 | 欧美成人精品一区 | 国产一级片91 | 曰韩黄色片 | 久夜tv| 精品一区二区三区免费毛片爱 | 国产精品久久久久久久久久三级 | 成人视屏在线 | 精国品产一区二区三区有限公司 | 免费黄色在线电影 | 久久精品国产亚洲aa级女大片 | 在线观看国产一区二区三区 | 操网 | 他也色在线视频 | 国产免费让你躁在线视频 | 国产乱子视频 | 毛片免费看电影 | 一级片a| 日韩视频精品一区 | 精品成人av一区二区三区 | 毛片在线免费观看完整版 | 欧美 日韩 国产 成人 | av在线播放免费 |