使用BiConsumer接口

记一次使用BiConsumer记录

遇到的问题

在对接HL7中过程中遇到了一段代码,非常繁琐,想找找优化代码的方案,询问了ChatGPT,回答了这个接口。

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
switch (type) {
case "IMP":
pacsPO.setImpression(this.getHl7Value(data));
break;
case "REC":
pacsPO.setAdvice(this.getHl7Value(data));
break;
case "GDT":
pacsPO.setSee(this.getHl7Value(data));
break;
case "RRP":
pacsPO.setReportUrl(this.getHl7Value(data));
break;
case "ZMF":
pacsPO.setMasterReportFile(this.getHl7Value(data));
break;
case "ZRF":
pacsPO.setRelationReportFile(this.getHl7Value(data));
break;
case "AFD":
pacsPO.setObserValue(this.getHl7Value(data));
break;
case "ANT":
break;
case "I9":
pacsPO.setDiagName(this.getHl7Value(data));
break;
case "CMR":
continue;
default:
continue;
}

大体特征是每个类型对应一个set方法。

优化方案

先初始化这个map,放进去一个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* typeHandlerMap用于存放对应类型所应该字段的赋值
**/
private static Map<String, BiConsumer<PatientPacsResultPO, Type>> typeHandlerMap = new HashMap<>();

/**
* 初始化typeHandlerMap
* 2025/2/20 9:52
**/
static {
typeHandlerMap.put("IMP", (po, data) -> po.setImpression(getHl7Value(data)));
typeHandlerMap.put("GDT", (po, data) -> po.setSee(getHl7Value(data)));
typeHandlerMap.put("REC", (po, data) -> po.setAdvice(getHl7Value(data)));
typeHandlerMap.put("RRP", (po, data) -> po.setReportUrl(getHl7Value(data)));
typeHandlerMap.put("ZMF", (po, data) -> po.setMasterReportFile(getHl7Value(data)));
typeHandlerMap.put("ZRF", (po, data) -> po.setRelationReportFile(getHl7Value(data)));
typeHandlerMap.put("AFD", (po, data) -> po.setObserValue(getHl7Value(data)));
typeHandlerMap.put("I9", (po, data) -> po.setDiagName(getHl7Value(data)));
}

然后方法中调用

1
2
typeHandlerMap.getOrDefault(type, (po, d) -> {
}).accept(pacsPO, data);

使用BiConsumer接口
http://liushuliang.github.io/2025/02/20/使用BiConsumer接口/
作者
刘公子
发布于
2025年2月20日
许可协议