From 6da85463c9a4abf3bfd5fa9ff99be873f50d9fd8 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Fri, 3 Mar 2023 23:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=9F=BA=E4=BA=8E?= =?UTF-8?q?=E9=98=BF=E9=87=8C=E5=B7=B4=E5=B7=B4=20Java=20=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=89=8B=E5=86=8C(=E9=BB=84=E5=B1=B1=E7=89=88)?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E7=A9=BA=E9=9B=86=E5=90=88?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.编程规约>集合处理>第7条:(个人理解:emptyList() 固然可以减少资源浪费,但未来由于不确定的需求变更,一旦增删元素必然会引发异常) 【强制】Collections 类返回的对象,如:emptyList() / singletonList() 等都是 immutable list,不可 对其进行添加或者删除元素的操作。 反例:如果查询无结果,返回 Collections.emptyList() 空集合对象,调用方一旦在返回的集合中进行了添加元素的操 作,就会触发 UnsupportedOperationException 异常。 2.编程规约>集合处理>第17条: 【推荐】集合初始化时,指定集合初始值大小。 说明:HashMap 使用构造方法 HashMap(int initialCapacity) 进行初始化时,如果暂时无法确定集合大小,那么指 定默认值(16)即可。 正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果 暂时无法确定初始值大小,请设置为 16(即默认值)。 反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素增加而被迫不断扩容,resize() 方法 总共会调用 8 次,反复重建哈希表和数据迁移。当放置的集合元素个数达千万级时会影响程序性能。 --- .../cnadmin/common/base/BaseServiceImpl.java | 6 +++--- .../cnadmin/common/constant/CharConsts.java | 5 +++++ .../cnadmin/common/model/vo/PageDataVO.java | 2 +- .../top/charles7c/cnadmin/common/util/MailUtils.java | 4 ++-- .../charles7c/cnadmin/common/util/StreamUtils.java | 6 +++--- .../top/charles7c/cnadmin/common/util/TreeUtils.java | 4 ++-- .../system/service/impl/RoleMenuServiceImpl.java | 4 ++-- .../cnadmin/system/service/impl/RoleServiceImpl.java | 12 +++--------- 8 files changed, 21 insertions(+), 22 deletions(-) diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java index 9aea0c1a..cea583b6 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java @@ -17,8 +17,8 @@ package top.charles7c.cnadmin.common.base; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -104,7 +104,7 @@ public abstract class BaseServiceImpl, T, V, D, Q, C ext public List> tree(Q query, SortQuery sortQuery, boolean isSimple) { List list = this.list(query, sortQuery); if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); + return new ArrayList<>(0); } // 如果构建简单树结构,则不包含基本树结构之外的扩展字段 @@ -205,7 +205,7 @@ public abstract class BaseServiceImpl, T, V, D, Q, C ext queryWrapper.orderBy(order != null, order.isAscending(), StrUtil.toUnderlineCase(order.getProperty())); } List entityList = baseMapper.selectList(queryWrapper); - return CollUtil.isNotEmpty(entityList) ? BeanUtil.copyToList(entityList, targetClass) : Collections.emptyList(); + return BeanUtil.copyToList(entityList, targetClass); } /** diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CharConsts.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CharConsts.java index dee0a0ea..c319567e 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CharConsts.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CharConsts.java @@ -34,4 +34,9 @@ public class CharConsts implements CharPool { * 分号 */ public static final String SEMICOLON = ";"; + + /** + * 空字符串 + */ + public static final String EMPTY = ""; } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/PageDataVO.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/PageDataVO.java index 5d50c09c..8b11b837 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/PageDataVO.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/PageDataVO.java @@ -120,7 +120,7 @@ public class PageDataVO { int fromIndex = (page - 1) * size; int toIndex = page * size + size; if (fromIndex > list.size()) { - pageDataVO.setList(new ArrayList<>()); + pageDataVO.setList(new ArrayList<>(0)); } else if (toIndex >= list.size()) { pageDataVO.setList(list.subList(fromIndex, list.size())); } else { diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/MailUtils.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/MailUtils.java index 2ec7eef7..6f8ceeb4 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/MailUtils.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/MailUtils.java @@ -18,8 +18,8 @@ package top.charles7c.cnadmin.common.util; import java.io.File; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import javax.mail.MessagingException; @@ -229,7 +229,7 @@ public class MailUtils { */ private static List splitAddress(String addresses) { if (StrUtil.isBlank(addresses)) { - return Collections.emptyList(); + return new ArrayList<>(0); } List result; diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/StreamUtils.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/StreamUtils.java index 429fc02b..48d44b43 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/StreamUtils.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/StreamUtils.java @@ -24,10 +24,10 @@ import java.util.stream.Collectors; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.StringUtils; - import cn.hutool.core.collection.CollUtil; +import top.charles7c.cnadmin.common.constant.CharConsts; + /** * Stream 工具类 * @@ -52,7 +52,7 @@ public class StreamUtils { */ public static String join(Collection collection, Function function, CharSequence delimiter) { if (CollUtil.isEmpty(collection)) { - return StringUtils.EMPTY; + return CharConsts.EMPTY; } return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter)); } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/TreeUtils.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/TreeUtils.java index d5d372a1..ac4cb246 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/TreeUtils.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/TreeUtils.java @@ -16,7 +16,7 @@ package top.charles7c.cnadmin.common.util; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import lombok.AccessLevel; @@ -79,7 +79,7 @@ public class TreeUtils { */ public static List> build(List list, TreeNodeConfig treeNodeConfig, NodeParser nodeParser) { if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); + return new ArrayList<>(0); } E parentId = (E)ReflectUtil.getFieldValue(list.get(0), treeNodeConfig.getParentIdKey()); return TreeUtil.build(list, parentId, treeNodeConfig, nodeParser); diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleMenuServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleMenuServiceImpl.java index ffdbff35..a4569627 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleMenuServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleMenuServiceImpl.java @@ -16,7 +16,7 @@ package top.charles7c.cnadmin.system.service.impl; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -60,7 +60,7 @@ public class RoleMenuServiceImpl implements RoleMenuService { @Override public List listMenuIdByRoleIds(List roleIds) { if (CollUtil.isEmpty(roleIds)) { - return Collections.emptyList(); + return new ArrayList<>(0); } return roleMenuMapper.selectMenuIdsByRoleIds(roleIds); } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java index 68de0fd4..65a7de5e 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java @@ -16,7 +16,7 @@ package top.charles7c.cnadmin.system.service.impl; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -141,7 +141,7 @@ public class RoleServiceImpl extends BaseServiceImpl menuIds = list.stream().map(MenuVO::getMenuId).collect(Collectors.toList()); detailVO.setMenuIds(menuIds); } else { - detailVO.setMenuIds(roleMenuService.listMenuIdByRoleIds(Collections.singletonList(roleId))); + detailVO.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId))); } detailVO.setDeptIds(roleDeptService.listDeptIdByRoleId(roleId)); } @@ -150,7 +150,7 @@ public class RoleServiceImpl extends BaseServiceImpl> buildDict(List list) { if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); + return new ArrayList<>(0); } return list.stream().map(r -> new LabelValueVO<>(r.getRoleName(), r.getRoleId())).collect(Collectors.toList()); } @@ -158,9 +158,6 @@ public class RoleServiceImpl extends BaseServiceImpl listRoleNamesByRoleIds(List roleIds) { List roleList = super.lambdaQuery().select(RoleDO::getRoleName).in(RoleDO::getRoleId, roleIds).list(); - if (CollUtil.isEmpty(roleList)) { - return Collections.emptyList(); - } return roleList.stream().map(RoleDO::getRoleName).collect(Collectors.toList()); } @@ -168,9 +165,6 @@ public class RoleServiceImpl extends BaseServiceImpl listRoleCodesByUserId(Long userId) { List roleIds = userRoleService.listRoleIdsByUserId(userId); List roleList = super.lambdaQuery().select(RoleDO::getRoleCode).in(RoleDO::getRoleId, roleIds).list(); - if (CollUtil.isEmpty(roleList)) { - return Collections.emptySet(); - } return roleList.stream().map(RoleDO::getRoleCode).collect(Collectors.toSet()); } }