使用lamda表达式的forEach简化双层for循环

 public static void main(String[] args) {
    //准备数据
    Map<String,String> map1 = new HashMap<String,String>(){
        {
            put("name","张三");
            put("sex","男");
            put("age","20");
        }
    };
    Map<String,String> map2 = new HashMap<String,String>(){
        {
            put("name","李四");
            put("sex","男");
            put("age","20");
        }
    };
    Map<String,String> map3 = new HashMap<String,String>(){
        {
            put("name","张三");
            put("sex","女");
            put("age","20");
        }
    };
    List<Map<String,String>> list = new ArrayList<Map<String,String>>(){
        {
            add(map1);
            add(map2);
            add(map3);
        }
    };
    Map<String,String> map11 = new HashMap<String,String>(){
        {
            put("name","张三");
            put("sex","男");
            put("mobile","18511112221");
        }
    };
    Map<String,String> map22 = new HashMap<String,String>(){
        {
            put("name","李四");
            put("sex","男");
            put("mobile","18511112222");
        }
    };
    Map<String,String> map33 = new HashMap<String,String>(){
        {
            put("name","张三");
            put("sex","女");
            put("mobile","18511112223");
        }
    };
    List<Map<String,String>> list1 = new ArrayList<Map<String,String>>(){
        {
            add(map11);
            add(map22);
            add(map33);
        }
    };
    //准备数据结束

    //匹配出所有个人信息列表

    //传统的双层for循环
    List<Map<String,String>> result = new ArrayList<>();
    Map<String,String> resultMap = null;
    for (Map<String,String> map : list){
        for (Map<String,String> mapStr : list1){
            if (mapStr.get("name").equals(map.get("name")) && mapStr.get("sex").equals(map.get("sex"))){
                resultMap = new HashMap<>();
                resultMap.putAll(mapStr);
                resultMap.putAll(map);
                result.add(resultMap);
            }
        }
    }
    System.out.println(result);


    //使用lamda表达式的简洁写法
    list.stream().forEach(map0 -> {
        map0.put("mobile",list1.stream().filter(t->t.get("name").equals(map0.get("name"))).filter(t->t.get("sex").equals(map0.get("sex"))).findFirst().get().get("mobile"));
    });
    System.out.println(list);
}

运行结果如下:

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容