精简java代码

https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650744508&idx=1&sn=d2139b5f07987064ce171d77216fb9da&chksm=bea7576f89d0de7954f8323a47a6c0a61bec7c3afcabd7261eca6cd7924ead6f1609d368892d&mpshare=1&scene=1&srcid=0511nco90qcVTKWCiGSi972a&sharer_sharetime=1589196266239&sharer_shareid=6272e52ce9422e3a5f099af085b1bdae&key=595c9888292a8f2ed7dd0ea239815ecac59cc66dbc3549dd1e63ec190f1bd5687df2a91a9fbb06538cfab7c1f80f7010ea7d6c5bf11cd75cb004bf50f7e6295c2c2ae78f0f83bb82241456ab3647093a&ascene=1&uin=NjU1ODcyMzgw&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&exportkey=AfuUI8WwWbe9W%2FjJ8R293RQ%3D&pass_ticket=8qzCxr7T%2Br4cT1hSRhT0t%2F%2BJNtgWbF8GHJOEjqYeaQI5PVH5iw%2FF0xaJe4lRe169

 

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));

    }

}

精简:

Set<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);

}

 

5.1.避免空值判断

 

普通:

 

if (userList != null && !userList.isEmpty()) {

    // TODO: 处理代码

}

精简:

if (CollectionUtils.isNotEmpty(userList)) {

    // TODO: 处理代码

}

 

5.4.简化数据拷贝

 

普通:

 

UserVO userVO = new UserVO();

userVO.setId(userDO.getId());

userVO.setName(userDO.getName());

...

userVO.setDescription(userDO.getDescription());

userVOList.add(userVO);

精简:

UserVO userVO = new UserVO();

BeanUtils.copyProperties(userDO, userVO);

userVOList.add(userVO);

反例:

List<UserVO> userVOList = JSON.parseArray(JSON.toJSONString(userDOList), UserVO.class);

精简代码,但不能以过大的性能损失为代价。例子是浅层拷贝,用不着 JSON 这样重量级的武器。

 

JSON.parseArray(String,Class)获得的字符串直接转换成对象

 

@Test

public void testCreateUser() {

    String jsonText = ResourceHelper.getResourceAsString(getClass(), "createUser.json");

    UserCreateVO userCreate = JSON.parseObject(jsonText, UserCreateVO.class);

    Long userId  = userService.createUser(OPERATOR, userCreate);

    Assert.assertNotNull(userId, "创建用户失败");

}

 

 

6.3.利用容器类简化

 

Java 不像 Python 和 Go ,方法不支持返回多个对象。如果需要返回多个对象,就必须自定义类,或者利用容器类。常见的容器类有 Apache 的 Pair 类和 Triple 类, Pair 类支持返回 2 个对象, Triple 类支持返回 3 个对象。

 

普通:

 

@Setter

@Getter

@ToString

@AllArgsConstructor

public static class PointAndDistance {

    private Point point;

    private Double distance;

}

 

public static PointAndDistance getNearest(Point point, Point[] points) {

    // 计算最近点和距离

    ...

 

    // 返回最近点和距离

    return new PointAndDistance(nearestPoint, nearestDistance);

}

精简:

public static Pair<Point, Double> getNearest(Point point, Point[] points) {

    // 计算最近点和距离

    ...

 

    // 返回最近点和距离

    return ImmutablePair.of(nearestPoint, nearestDistance);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值