java使用Map映射方法
代码讲解
1 相同参数 没有返回值
bath
使用 Map<Integer, Consumer<MqDeadLetterInventory>>
-- Consumer 用来统一对象
-- MqDeadLetterInventory参数类型
-- .get 获取对象
-- .accept 执行对象
2 相同参数 有返回值
bath
使用 Map<Integer, Function<MqDeadLetterInventory, Result>>
-- Function 用来统一对象
-- MqDeadLetterInventory参数类型
-- Result 结果
-- .get 获取对象
-- .apply 执行对象, 执行之后会有返回结果 Result
3 更多场景.....
js
其他 参数不同 等场景,自行根据需求处理
4 注意事项
js
Map.of()
-- 参数不能为null;
-- 数量不能超过10条;
业务使用
java
private void handleResend(MqDeadLetterInventory deadLetter) {
if (deadLetter == null || deadLetter.getQueueType() == null) {
return;
}
// 映射:队列类型 -> 对应的发送逻辑
Map<Integer, Consumer<MqDeadLetterInventory>> sendActionMap = Map.of(
MqConstants.INVENTORY_SKU_QUEUE, inventorySkuMqService::sendInventorySkuMq,
MqConstants.INVENTORY_WAREHOUSE_QUEUE, inventoryWarehouseMqService::sendInventoryWarehouseMq,
MqConstants.INVENTORY_INVOICE_QUEUE, invoiceStockMqService::sendInvoiceStockMq,
MqConstants.INVENTORY_LOCATION_QUEUE, locationInventoryMqService::sendInventoryLocationMq
);
Integer queueType = deadLetter.getQueueType();
Consumer<MqDeadLetterInventory> sendAction = sendActionMap.get(queueType);
if (sendAction == null) {
log.warn("未知的队列类型: {}", queueType);
return;
}
// 执行发送
sendAction.accept(deadLetter);
// 删除死信记录
int res = mqDeadLetterInventoryMapper.deleteMqDeadLetterInventoryById(deadLetter.getId(), deadLetter.getTenantId());
if (res <= 0) {
throw new ServiceException("删除死信队列失败!");
}
}