From 892cc71f0e67f47bdc5a3c568b2a3e258c209ea1 Mon Sep 17 00:00:00 2001 From: yqzhangak Date: Wed, 26 Jun 2024 15:27:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E2=80=9C=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=B1=BB=E5=9E=8B=E5=92=8C=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E5=80=BC=E8=8E=B7=E5=8F=96=E5=AD=97=E5=85=B8=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E2=80=9D=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 使用严格意义上的包含 StringUtils.contains 替换 StringUtils.containsAny; 2. 使用 StringUtils.removeEnd 替换 StringUtils.stripEnd,因 label 本身也许恰好以 separator 结尾; 3. 减少嵌套循环。 --- .../com/ruoyi/common/utils/DictUtils.java | 48 +++++++++---------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java index 8204f1338..1ea18a76b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -1,13 +1,17 @@ package com.ruoyi.common.utils; -import java.util.Collection; -import java.util.List; import com.alibaba.fastjson2.JSONArray; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.spring.SpringUtils; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + /** * 字典工具类 * @@ -89,37 +93,29 @@ public class DictUtils */ public static String getDictLabel(String dictType, String dictValue, String separator) { - StringBuilder propertyString = new StringBuilder(); - List datas = getDictCache(dictType); - if (StringUtils.isNull(datas)) + List data = getDictCache(dictType); + if (Objects.isNull(data)) { return StringUtils.EMPTY; } - if (StringUtils.containsAny(separator, dictValue)) + + // 先将字典集合转换为 Map 结构,便于后续按 dictValue 取值。 + Map dictMap = data.stream() + .collect(HashMap::new, (map, dict) -> map.put(dict.getDictValue(), dict.getDictLabel()), Map::putAll); + if (!StringUtils.contains(dictValue, separator)) { - for (SysDictData dict : datas) + return dictMap.getOrDefault(dictValue, StringUtils.EMPTY); + } + + StringBuilder labelBuilder = new StringBuilder(); + for (String seperatedValue : dictValue.split(separator)) + { + if (dictMap.containsKey(seperatedValue)) { - for (String value : dictValue.split(separator)) - { - if (value.equals(dict.getDictValue())) - { - propertyString.append(dict.getDictLabel()).append(separator); - break; - } - } + labelBuilder.append(dictMap.get(seperatedValue)).append(separator); } } - else - { - for (SysDictData dict : datas) - { - if (dictValue.equals(dict.getDictValue())) - { - return dict.getDictLabel(); - } - } - } - return StringUtils.stripEnd(propertyString.toString(), separator); + return StringUtils.removeEnd(labelBuilder.toString(), separator); } /**