JDK lambda 转换Map<String, List<List<String>>> 转换

    class B_F {
        private String B_id;
        private String F_id;


        public String getB_id() {
            return B_id;
        }

        public void setB_id(String b_id) {
            B_id = b_id;
        }

        public String getF_id() {
            return F_id;
        }

        public void setF_id(String f_id) {
            F_id = f_id;
        }

        public B_F(String B_id, String F_id) {
            this.B_id = B_id;
            this.F_id = F_id;
        }
    }

    class B {
        private String id;
        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public B(String id, String name) {
            this.id = id;
            this.name = name;
        }
    }

    class C {
        private String id;
        private String B_id;
        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getB_id() {
            return B_id;
        }

        public void setB_id(String b_id) {
            B_id = b_id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public C(String id, String b_id, String name) {
            this.id = id;
            B_id = b_id;
            this.name = name;
        }
    }

    @Test
    public void testAA() {
        List<B_F> b_fList = new ArrayList<>();
        B_F b_f1 = new B_F("b1", "F1");
        B_F b_f2 = new B_F("b2", "F1");
        B_F b_f3 = new B_F("b3", "F1");
        B_F b_f4 = new B_F("b4", "F2");
        b_fList.add(b_f1);
        b_fList.add(b_f2);
        b_fList.add(b_f3);
        b_fList.add(b_f4);



        List<B> bList = new ArrayList<>();
        B b1 = new B("b1", "bName1");
        B b2 = new B("b2", "bName2");
        B b3 = new B("b3", "bName3");
        bList.add(b1);
        bList.add(b2);
        bList.add(b3);
        Map<String, B> bMap = bList.stream().collect(Collectors.toMap(B::getId, Function.identity()));


        Map<String, List<B>> bfListBMap = b_fList.stream()
                .collect(Collectors.groupingBy(
                        B_F::getF_id,
                        Collectors.mapping(bf -> bMap.get(bf.getB_id()), Collectors.toList())));



        List<C> cList1 = new ArrayList<>();
        C c1 = new C("c1", "b1", "cName1");
        C c2 = new C("c2", "b1", "cName2");
        C c3 = new C("c3", "b1", "cName3");
        C c4 = new C("c4", "b2", "cName4");
        C c5 = new C("c5", "b2", "cName5");
        C c6 = new C("c6", "b3", "cName4");
        C c7 = new C("c7", "b3", "cName5");
        cList1.add(c1);
        cList1.add(c2);
        cList1.add(c3);
        cList1.add(c4);
        cList1.add(c5);
        cList1.add(c6);
        cList1.add(c7);

        Map<String, List<C>> cMap = cList1.stream().collect(Collectors.groupingBy(C::getB_id));

        // 这个lambda怎么转换为, Map<String, List<C>>
        Map<String, List<List<C>>> bfListCMap = b_fList.stream()
                .collect(Collectors.groupingBy(
                        B_F::getF_id,
                        Collectors.mapping(bf -> cMap.get(bf.getB_id()), Collectors.toList())));
        
    }

// 这个lambda, Map<String, List<List<C>>> 怎么转换为 Map<String, List<C>>

 

 

 

Map<String,List<String>> res = new HashMap<>();
map.forEach((k,v)->{
List<String> newV = new ArrayList<>();
v.forEach(newV::addAll);
res.put(k,newV);
});

 

public class Test {
    public static void main(String[] args) {

        List<String> b11 = new ArrayList<>();
        b11.add("b11");
        List<String> b12 = new ArrayList<>();
        b12.add("b12");
        List<List<String>> a1 = new ArrayList<>();
        a1.add(b11);
        a1.add(b12);

        List<String> b21 = new ArrayList<>();
        b21.add("b21");
        List<String> b22 = new ArrayList<>();
        b22.add("b22");
        List<List<String>> a2 = new ArrayList<>();
        a2.add(b21);
        a2.add(b22);

        Map<String, List<List<String>>> sourceMap = new HashMap<>();
        sourceMap.put("m1", a1);
        sourceMap.put("m2", a2);

        System.out.println("sourceMap:" + JSON.toJSONString(sourceMap));

        Map<String, List<String>> targetMap = new HashMap<>();
        sourceMap.forEach((k, v) ->{
            List<String> sList = new ArrayList<>();
            v.forEach((a) ->{
                a.forEach((b)->{
                    sList.add(b);
                });
            });
            targetMap.put(k, sList);
        });

        System.out.println("targetMap:" + JSON.toJSONString(targetMap));
    }
}

Map<String, List<String>> res = ((Function<Map<String, List<List<String>>>, Map<String, List<String>>>) stringListMap -> {
            Map<String, List<String>> res1 = new HashMap<>();
            map.forEach((k, v) -> {
                List<String> newV = new ArrayList<>();
                v.forEach(newV::addAll);
                res1.put(k, newV);
            });
            return res1;
        }).apply(map);

同事要是这样写代码我就离职

题目描述有问题,我调整一下

使用一个lambda表达式转换:

Map<String, List<List<String>>> 转换为 Map<String, List<String>>, 且lambda返回值为Map<String, List<String>>

# 答案如下

Map<String, List<List<C>>> bfListCMap = b_fList.stream()
.collect(Collectors.groupingBy(
                        B_F::getF_id,
                        Collectors.mapping(bf -> cMap.get(bf.getB_id()),Collectors.toList())))
.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, listEntry -> listEntry.getValue()
                        .stream()
                        .flatMap(Collection::stream)
                        .filter(Objects::nonNull)
                        .collect(Collectors.toList())));