Java Lambda 用法

按分组获取分组中最新一条记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* 历史任务实体类
*/
@Data
@NoArgsConstructor
public class HistoryTask implements Serializable {
private static final long serialVersionUID = 7925632180050362451L;
/**
* 主键ID
*/
private String id;
/**
* 流程实例ID
*/
private String orderId;
/**
* 任务名称
*/
private String taskName;
/**
* 任务显示名称
*/
private String displayName;
/**
* 任务处理者ID
*/
private String operator;
/**
* 任务创建时间
*/
private String createTime;
/**
* 任务完成时间
*/
private String finishTime;
}

public Map<String, HistoryTask> getLatest(List<HistoryTask> historyTasks) {
return historyTasks.stream().collect(
// 根据任务处理者 Id 分组,获取各自分组中最新的一条记录
Collectors.toMap(
HistoryTask::getOperator,
Function.identity(),
(h1, h2) -> {
try {
Date date1 = DateUtil.parseDate(h1.getFinishTime(), "yyyy-MM-dd HH:mm:ss");
Date date2 = DateUtil.parseDate(h2.getFinishTime(), "yyyy-MM-dd HH:mm:ss");
return date1.after(date2) ? h1 : h2;
} catch (ParseException e) {
// ignore
}
return h1;
})
);
}

List<HistoryTask> historyTasks = ...
historyTasks = new ArrayList<>(getLatest(historyTasks).values());
  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/cc1d3937.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!