如何使用分组通过对流中的对象列表进行排序和归约

克里斯·洛夫纳(Chris Loughnane):

我有一个List<FloatBalance>可由以下JSON表示的对象列表我想获取列表中每种货币的最新条目并将修剪后的列表传递回请求。

    {
        "id": 1,
        "clientId": 50,
        "currency": "GBP",
        "floatType": "ChargeFloat",
        "floatCurrentValue": 300.00,
        "chargeReference": "PROD-1578486576_278",
        "cashOutReference": null,
        "cashInReference": null,
        "targetValue": 3000.00,
        "alertValue": 500.00,
        "maxValue": 4500.00,
        "createdDate": "2020-01-08T12:29:50Z"
    },
...
]

我的第一次尝试是直接前进,我将它们按货币分组

Map<String, List<FloatBalance>> result = floats.stream()
                    .collect(groupingBy(FloatBalance::getCurrency));

然后我将它们分组并按最新日期排序

Map<String, List<FloatBalance>> floatGrouped = floats.stream()
                    .sorted(Comparator.comparing(FloatBalance::getCreatedDate).reversed())
                    .collect(groupingBy(FloatBalance::getCurrency));

地图结果

在此处输入图片说明

我也可以减少列表,但只能在完整列表上执行此操作,该列表仅返回最新条目。

FloatBalance floatGrouped = floats.stream()
                    .sorted(Comparator.comparing(FloatBalance::getCreatedDate))
                    .reduce((first, second) -> second)
                    .orElse(null);

我已经转了一圈,试图弄清楚这一点,我试图对.entrySet()地图上的每个条目进行减少,但是计算机对我尝试过的所有内容都拒绝。

理想情况下,我想重新运行每种货币的最新条目作为系统响应。

YCF_L:

您在寻找:

List<FloatBalance> result = floats.stream()
        .collect(Collectors.groupingBy(FloatBalance::getCurrency,
                Collectors.maxBy(Comparator.comparing(FloatBalance::getCreatedDate))))
        .values().stream()
        .filter(Optional::isPresent)
        .map(Optional::get)
        .collect(Collectors.toList());

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何按降序对列表和分组依据进行排序?

如何使用Java 8将一组对象分组到排序列表中?

如何通过Java中的其他列表对列表对象进行排序

在Python中对嵌套列表进行排序和分组

对对象列表进行排序和分组

如何通过排序,分区和分组进行行编号

使用Underscore.js对对象进行分组和排序

使用Lambda对列表进行排序和分组

如何从rails上的ruby的有序列表中对子查询进行排序和分组

对字典列表进行排序和分组

如何通过内联代码对列表中的项目进行分组和拆分?

按LocalDateTime对流中的地图进行排序

如何通过两个属性和排序规则对对象列表进行排序

在管道中对Powershell对象进行分组和排序

在Kotlin中对单个列表进行分组和排序的更好方法

如何通过字符串属性对对象列表进行排序并使用`key`参数?

如何对数组对象进行分组和排序

对流中的对象列表进行排序,并在flutter中将排序后的列表作为流返回

如何按列表中的属性对对象进行分组和计数?

如何根据日期对wordpress中的帖子进行分组和排序?

如何对两种不同类型列表的对象进行分组和排序?

在java中对数组列表进行分组和排序

根据对象字段的分组对列表进行排序,根据组中的最大值进行排序

如何使用 PowerShell 按部门和职位对包含员工列表的 CSV 文件进行排序和分组

如何使用对象的属性作为列表对象和值作为顺序对列表进行排序?

如何对列表中的对象进行排序?

对列表中的前 3 个值进行分组和排序

如何根据列表中的某些标志对列表进行分组和排序?

对对象进行分组和排序