java - 如何将以下 Stream 转换为 Pojo
问题描述
数据表示如下
部门 | 计数 | 姓名
一个 | 5 | 拉梅什
一个 | 2 | 阿洛克
乙 | 4 | 苏雷什
乙 | 5 | 阿诺德
c | 4 | 布赖恩
c | 5 | 桑托什
c | 5 | 拉梅什
我想转换以下列表
List<Object[]> departWiseDistinctNameCount = Arrays.asList(Arrays.asList("a", "5", "Ramesh"), Arrays.asList("a", "2", "Alok"), Arrays.asList("b", "4", "Suresh"), Arrays.asList("b", "5", "Arnold"), Arrays.asList("c", "4", "Brian"), Arrays.asList("c", "5", "Santosh"), Arrays.asList("c", "5", "Ramesh"));
到 POJO
class Dept {
private String deptName;
List<Counter> counters;
}
class Counter{
private int count;
private String name;
}
解决方案
正如评论中已经指出的那样,您绝对应该尝试直接将数据作为 POJO 列表获取。
但是,您要求一种映射列表的方法,因此您可以这样做:
departWiseDistinctNameCount.stream()
.collect(Collectors.groupingBy(l -> l.get(0),
Collectors.mapping(l -> new Counter(Integer.parseInt(l.get(1)), l.get(2)),
Collectors.toList())))
.entrySet().stream().map(e -> new Dept(e.getKey(), e.getValue())).collect(Collectors.toList())
为了澄清:我添加了构造函数public Dept(String deptName, List<Counter> counters)
和public Counter(int count, String name)
.
此外,您声明的语句departWiseDistinctNameCount
实际上会导致编译错误,因为 aList<List<String>>
不能强制转换为 a List<Object[]>
。我假设 a List<List<String>>
,但如果你只有后者,你可以通过使用(String) l[0]
而不是l.get(0)
等轻松地在流中转换。