4.1. 利用构造方法
构造方法,可以简化对象的初始化和设置属性操作。对于属性字段较少的类,可以自定义构造方法。
普通:
public class PageDataVO<T> { | |
private Long totalCount; | |
private List<T> dataList; | |
} | |
PageDataVO<UserVO> pageData = new PageDataVO<>(); | |
pageData.setTotalCount(totalCount); | |
pageData.setDataList(userList); | |
return pageData; |
精简:
public class PageDataVO<T> { | |
private Long totalCount; | |
private List<T> dataList; | |
} | |
return new PageDataVO<>(totalCount, userList); |
注意:如果属性字段被替换时,存在构造函数初始化赋值问题。比如把属性字段 title 替换为 nickname,由于构造函数的参数个数和类型不变,原有构造函数初始化语句不会报错,导致把原 title 值赋值给 nickname。如果采用 Setter 方法赋值,编译器会提示错误并要求修复。
4.2. 利用 Set 的 add 方法
利用 Set 的 add 方法的返回值,可以直接知道该值是否已经存在,可以避免调用 contains 方法判断存在。
普通:
以下案例是进行用户去重转化操作,需要先调用 contains 方法判断存在,后调用 add 方法进行添加。
Set<Long> userIdSet = new HashSet<>(); | |
List<UserVO> userVOList = new ArrayList<>(); | |
for (UserDO userDO : userDOList) { | |
if (!userIdSet.contains(userDO.getId())) { | |
userIdSet.add(userDO.getId()); | |
userVOList.add(transUser(userDO)); | |
} | |
} |
精简:
SSet<Long> userIdSet = new HashSet<>(); | |
List<UserVO> userVOList = new ArrayList<>(); | |
for (UserDO userDO : userDOList) { | |
if (userIdSet.add(userDO.getId())) { | |
userVOList.add(transUser(userDO)); | |
} | |
} |
4.3. 利用 Map 的 computeIfAbsent 方法
利用 Map 的 computeIfAbsent 方法,可以保证获取到的对象非空,从而避免了不必要的空判断和重新设置值。
普通:
Map<Long, List<UserDO>> roleUserMap = new HashMap<>(); | |
for (UserDO userDO : userDOList) { | |
Long roleId = userDO.getRoleId(); | |
List<UserDO> userList = roleUserMap.get(roleId); | |
if (Objects.isNull(userList)) { | |
userList = new ArrayList<>(); | |
roleUserMap.put(roleId, userList); | |
} | |
userList.add(userDO); | |
} |
精简:
Map<Long, List<UserDO>> roleUserMap = new HashMap<>(); | |
for (UserDO userDO : userDOList) { | |
roleUserMap.computeIfAbsent(userDO.getRoleId(),key -> new ArrayList<>()) | |
.add(userDO); | |
} |
4.4. 利用链式编程
链式编程,也叫级联式编程,调用对象的函数时返回一个 this 对象指向对象本身,达到链式效果,可以级联调用。链式编程的优点是:编程性强、可读性强、代码简洁。
普通:
StringBuilder builder = new StringBuilder(96); | |
builder.append("select id, name from"); | |
builder.append(T_USER);builder.append("where id =");builder.append(userId); | |
builder.append(";"); |
精简:
StringBuilder builder = new StringBuilder(96); | |
builder.append("select id, name from").append(T_USER).append("where id =").append(userId).append(";"); |
正文完