当前位置: 首页>后端>正文

一个好用的 Java 工具类 - 三元运算符替代

在单表查询时经常会遇到一对多的查询,也就是会使用 in 去进行另一个表的信息查询。此时你是否会使用 if 条件判断 或者 三元运算符 去处理可能空集合参数的情况?从而避免程序异常的抛出。在使用 Mybatis Plus 时,有没有更加优雅的去处理以上问题呢?我的做法是封装一个 Optionals 类,类似于Optional类进行空的处理并设置了默认值。

示例:

一个用户(t_sys_user)多个角色(t_sys_role),通过用户中间表(t_sys_user_role)进行关系映射。

查询语句如下:

User user = new User();
// 获取用户多个角色编号
SFunction<UserRole, Long> selectColumns = UserRole::getRoleId;
List<UserRole> userRoles = userRoleService.list(Wrappers.<UserRole>lambdaQuery().select(selectColumns).eq(UserRole::getId, user.getId()));
Set<Long> roleIds = Lambdas.convertSet(userRoles, selectColumns);

// 通过角色编号查询角色详细信息
List<Role> roles1 = roleService.listByIds(roleIds); // throw BadSqlGrammarException
List<Role> roles2 = CollUtil.isNotEmpty(roleIds) roleService.listByIds(roleIds) : CollUtil.newArrayList(); // 三元运算符
List<Role> roles3 = Optionals.of(roleIds).apply(roleService::listByIds); // 自定义工具类,方法应用操作符 ::

Optionals 代码

public class Optionals<T> {

    private final Collection<T> value;

    private Optionals(Collection<T> value) {
        this.value = value;
    }

    public static <T> Optionals<T> of(Collection<T> value) {
        return new Optionals<>(value);
    }

    public <R> List<R> apply(Function<Collection<T>, List<R>> function) {
        return !ObjectUtils.isEmpty(value) function.apply(value) : new ArrayList<>();
    }
}

喜欢 Lambdas 工具类的可以戳这里:一个好用的 JAVA 工具类 - JDK 8 Lambda 表达式


https://www.xamrdz.com/backend/3ge1937011.html

相关文章: