【发布时间】:2022-12-11 18:48:05
【问题描述】:
我有以下行数据集:-
OrderId Action Timestamp
3 Pay money 2015-05-27 12:48:47.000
3 Select Item 2015-05-27 12:44:47.000
1 Generate Payment 2015-05-27 12:55:47.000
2 Pay money 2015-05-27 12:48:47.000
2 Select Item 2015-05-27 12:44:47.000
2 Deliver 2015-05-27 12:55:47.000
1 Generate Invoice 2015-05-27 12:48:47.000
1 Create PO 2015-05-27 12:44:47.000
3 Deliver 2015-05-27 12:55:47.000
我想要实现的是一张地图:-
[3] -> ["Select Item", "Pay money", "Deliver"]
[1] -> ["Create PO", "Generate Invoice", "Generate Payment"]
[2] -> ["Select Item", "Pay money", "Deliver"]
通过执行以下操作:-
- 我想按 orderId 分组。
- 按时间戳对操作进行排序。
- 创建一组动作(因为可能有重复)。
我试图在单个 groupby 操作中执行此操作,因为执行单独的排序,如果数据集很大,映射操作会花费很多时间。
我试着这样做:-
orderRows.stream() .collect(Collectors.groupingBy(OrderRow::getOrderId, mapping(Function.identity(), toCollection( () -> new TreeSet<>(Comparator.comparing(e -> e.timestamp)) ))));但后来我得到输出为
Map<String, Set<OrderRow>>我在哪里寻找类似Map<String, Set<String>>的东西 如果有人能告诉我至少一个方向,我将非常感激......
【问题讨论】:
标签: java java-stream groupingby