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