我有一个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()
地图上的每个条目进行减少,但是计算机对我尝试过的所有内容都拒绝。
理想情况下,我想重新运行每种货币的最新条目作为系统响应。
您在寻找:
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] 删除。
我来说两句