我有一组对象,具有以下类型:
{
String action_name; //add or delete
long action_time;
String action_target;
}
需要在每个action_target
上获取最新的合并操作示例输入数据:
[add|1001|item1, add|1002|item2, delete|1003|item1, add|1004|item1]
预期结果:
[add|1002|item2, add|1004|item1]
示例输入数据:
[add|1001|item1, add|1002|item2, delete|1003|item1]
预期结果:
[add|1002|item2]
示例输入数据:
[delete|1001|item1, add|1002|item2, add|1003|item1]
预期结果:
[add|1002|item2, add|1003|item1]
使用Java8流API是否易于使用?感谢。
答案 0 :(得分:2)
您希望按分组一个条件(action_target
)与将组合并到最大 { {1}}值:
action_time
这会返回Map<String,Item> map=items.stream().collect(
Collectors.groupingBy(item->item.action_target,
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparing(item->item.action_time)),
Optional::get)));
,但当然,您可以在其上调用values()
来获取一系列项目。
使用Map<String,Item>
美化,代码如下:
static import
您处理幂等Map<String,Item> map=items.stream().collect(groupingBy(item->item.action_target,
collectingAndThen(maxBy(comparing(item->item.action_time)), Optional::get)));
和后续"add"
操作的其他请求可以简化为“删除最后操作为"delete"
的项目”,这可以通过执行来实现在使用可变地图收集后:
"delete"