美文网首页工具类合集
一个好用的 Java 工具类 - 三元运算符替代

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

作者: 极简博客 | 来源:发表于2023-06-01 16:15 被阅读0次

    在单表查询时经常会遇到一对多的查询,也就是会使用 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 表达式

    相关文章

      网友评论

        本文标题:一个好用的 Java 工具类 - 三元运算符替代

        本文链接:https://www.haomeiwen.com/subject/pdouedtx.html