Java 8分组,计数并转换为自定义对象

c0nf1ck:

我有这个代码:

Map<List<Object>, Long> collector = root.getReports().stream().collect(
    Collectors.groupingBy(r -> Arrays.asList(i.X(), i.Y(), i.Z(), i.A()), Collectors.counting()));

for(Entry<Object, Long> entry : collector.entrySet())
    System.out.println(String.format("%s = %s", entry.getKey(), entry.getValue()));

基本上会产生以下结果:

[16292, 141, 6, 100] = 2
[16288, 250, 59, 500] = 14
[16286, 250, 91, 50] = 4
[16287, 250, 91, 60] = 29
[16286, 250, 91, 80] = 10
[16293, 141, 6, 100] = 3
[16282, 079, 116, 50] = 9
...

我需要将此结果放入一个自定义类中:

@EqualsAndHashCode @ToString
public class CustomReport implements Serializable {
    private static final long serialVersionUID = 2074900904056768029L;

    @Getter @Setter
    private Integer x, y, z;
    
    @Getter @Setter
    private String a;

    @Getter @Setter
    private Long result;
}

有没有一种方法可以不遍历所有列表并手动进行?

混蛋:

不确定这是否是您想要的。但是,您可以Map<CustomReport, Long>直接获得a 而不是先创建a Map<List<Object>, Long>,然后通过它来将那些对象转换为目标类。

前提是CustomReport必须实现equals()[ 1 ]和hashCode()[ 2 ]

然后,您可以执行以下操作:

root.getReports().stream().collect(
    Collectors.groupingBy(i -> new CustomReport(i.X(), i.Y(), i.Z(), i.A()), 
        HashMap::new,
        Collectors.counting()));

我假设CustomReport也有兼容的构造函数。如果必须使用setter进行初始化,则可以将分类器的第一个参数替换为:

i -> {
    CustomReport c = new CustomReport();
    c.setX(i.X());
    ...
    return c;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

转换列表对象为使用Java 8个流对象的自定义地图

Java 8分组归类

使用自定义键对Java 8进行分组

使用自定义收集器进行Java 8分组?

使用Streams Java 8将自定义对象的列表合并到单个列表对象

Java 8分组通过获取LinkedHashMap并将映射的值映射到其他对象

如何使用Java 8流将HashMap的值设置为自定义Java对象?

Java 8分组并汇总List <List <String >>对象

将ArrayList <Object>的列表转换为自定义对象的最佳方法是什么java11 Spring Boot 2.1

如何将自定义嵌套列表xml转换为相应的Java对象

Java 8 Streams:将对象列表转换为一组对象

Java 8分组为对象集合

如何在Java中将字符串值转换为自定义模型对象?

rabbitmq使用json消息并转换为Java对象

java模拟自定义对象

Firebase到自定义Java对象

如何使用toDF()将自定义Java类对象的RDD转换为DataFrame?

Java 8分组通过返回多个字段

使用Java 8流将键值对转换为按键对象分组的最快方法

Java 8流图自定义函数并将其转换为Map

黄瓜6.9 Java8,无法从DataTable转换为自定义类型

Java将字符串转换为具有自定义格式的java.util.Date对象

在FreeMarker中,如何自动将自定义对象(例如java.awt.Color)转换为特定的String值(例如HTML十六进制颜色)?

将JSON字符串转换为Java中的自定义对象

无法将 java.lang.Object 转换为自定义对象

使用自定义反序列化器 Jackson 将 .json 文件转换为 Java 对象

如何在webflux中将spring boot websocket文本消息转换为自定义java对象(bean或DTO)

Java 按自定义变量分组并返回相同的对象

如何使用 Java 8 将 LinkedHashMap 列表转换为自定义对象列表