题目描述lambda groupingBy高级问题 List<A>怎么转换成List<B>题目来源及自己的思路查了很多资料,发现大多数网上都是教怎么把List转换成Map<String,List>我知道grupingBy方法有三个参数按道理。。如果自己定义输出的容器B,然后再定义怎么收集,或许可以实现?不知道怎么写...相关代码public class A{ private String name; private String value;
}public class B { private String name; private List<String> values;
}List<A> list = new ArrayList<>();list.add(new A("name1", "1"));list.add(new A("name1", "2"));list.add(new A("name2", "3"));
list.add(new A("name2", "4"));list.add(new A("name2", "5"));希望得到这样:List<B>
[
{ "name":"name1"
"values":[ "1", "2"
]
},
{ "name":"name2"
"values":[ "3", "4", "5"
]
}
]
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
public static void main(String[] args) {
List<AA> list = new ArrayList<AA>(); list.add(new AA("name1", 1)); list.add(new AA("name1", 2)); list.add(new AA("name2", 3)); list.add(new AA("name2", 4)); list.add(new AA("name2", 5)); List<B> listB = list.stream().collect(Collectors.groupingBy(new Function<AA, String>() { @Override public String apply(AA aa) { return aa.getName(); } }, HashMap::new, Collectors.mapping(new Function<AA, Integer>() { @Override public Integer apply(AA aa) { return aa.getValue(); } }, Collectors.toList()))).entrySet().stream() .map(new Function<Map.Entry<String, List<Integer>>, B>() { @Override public B apply(Map.Entry<String, List<Integer>> stringListEntry) { return new B(stringListEntry.getKey(),stringListEntry.getValue()); } }).collect(Collectors.toList()); System.out.println(JSON.toJSONString(listB)); } 很久不写了,可能写的不太好,A和B的value我都改成Integer了
添加回答
举报
0/150
提交
取消