利用stream對map集合進行過濾


原文地址:https://www.cnblogs.com/zhenghengbin/p/9387547.html

  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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM