猿问

lambda groupingBy高级问题 List<A>怎么转换成List<B>

题目描述

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"
         ]
    }    
]


一只甜甜圈
浏览 634回答 1
1回答

幕布斯6054654

public static void main(String[] args) {&nbsp;&nbsp;&nbsp;&nbsp;List<AA>&nbsp;list&nbsp;=&nbsp;new&nbsp;ArrayList<AA>();&nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;AA("name1",&nbsp;1));&nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;AA("name1",&nbsp;2));&nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;AA("name2",&nbsp;3));&nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;AA("name2",&nbsp;4));&nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;AA("name2",&nbsp;5));&nbsp;&nbsp;&nbsp;&nbsp;List<B>&nbsp;listB&nbsp;=&nbsp;list.stream().collect(Collectors.groupingBy(new&nbsp;Function<AA,&nbsp;String>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;apply(AA&nbsp;aa)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;aa.getName(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;HashMap::new,&nbsp;Collectors.mapping(new&nbsp;Function<AA,&nbsp;Integer>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;apply(AA&nbsp;aa)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;aa.getValue(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;Collectors.toList()))).entrySet().stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(new&nbsp;Function<Map.Entry<String,&nbsp;List<Integer>>,&nbsp;B>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;B&nbsp;apply(Map.Entry<String,&nbsp;List<Integer>>&nbsp;stringListEntry)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;B(stringListEntry.getKey(),stringListEntry.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).collect(Collectors.toList()); &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(JSON.toJSONString(listB)); } 很久不写了,可能写的不太好,A和B的value我都改成Integer了
随时随地看视频慕课网APP

相关分类

Java
我要回答