您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在Java8中使用stream過濾map集合,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
原有方法說明
主要處理過濾條件Map對象,過濾掉了null和空字符串 等操作
這里我簡單畫了個圖,對這個過程總結
1.利用filter對null和空字符串進行過濾
2.利用map進行對于Stream中包含的元素使用給定的轉換函數進行轉換操作
3.collect進行聚合成map
由于公司的代碼不合適自己展示,我這里自己仿照公司的寫了個類似的簡單方法,然后一步一步優化
自定義map工具類處理方法
//這里的代碼和原先的代碼相比做了修改,去掉了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; }
測試下
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類
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)); }
結果
{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); }
上述內容就是如何在Java8中使用stream過濾map集合,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。