1、业务需求
- 最近遇到一个问题:物流系统中每个port下面有最近三天的相关info;就是说需要按照port分组显示信息。
"data": {
"theFirstThreePort": [//默认情况下,Port的悬浮信息。
{
"hub_code": "BKK",
"port_code": "BKK",
"latitude": -1.37336,
"longitude": -48.46063,
"arrays": [
{
"voyage_no": 10,
"vessel_code": "RNA",
"base_arrival_time": "2022-01-14 08:00:00",
"service_code": "PA1"
},
{
"voyage_no": 11,
"vessel_code": "RNA",
"base_arrival_time": "2022-02-03 08:00:00",
"service_code": "PA1"
},
{
"voyage_no": 9,
"vessel_code": "RNA",
"base_arrival_time": "2021-12-25 08:00:00",
"service_code": "PA1"
}
]
}
]
}
- 采用map的数据结构(
Map<Map<String,Object>,HashSet<Map<String,Object>>> data=new HashMap<>(theFirstThreePortDtos.size());
)
2、函数的定义
computeIfAbsent官方文档说明
大致的意思就是:如果指定的key尚未与某个value关联,则尝试使用给定的映射函数计算其value,并将该值输入此映射,除非该值为空。如果函数返回空值,则不记录映射。
最常见的用法就是构造一个新对象作为初始值data.computeIfAbsent(key, k -> new HashSet<>())
或者要实现***多值映射*** Map<K, Collection(V)>
支持每个键有多个值map.computeIfAbsent(key, k->new HashSet.add(V))