查询重复数据,把不重复的数据拼接或以树形展示

本文介绍了如何利用QueryWrapper在User实体类中进行数据查询,处理重复但特定字段唯一的情况,并演示了如何通过流式操作获取不重复字段值并创建树形结构。还涉及了List去重技巧和数据展示的Vo类设计。
摘要由CSDN通过智能技术生成

先利用QueryWapper根据主要字段进行查询,前提是数据有重复但是有某几个字段没有重复时使以下方法
User实体类

@Data
public class User{
    private String userId;
    private String userName;
    private String errCode;
    private String errName;
    ...
}

一、需要拼接例图:

在这里插入图片描述
示例代码如下

    /**
     * 拼接code和name
     * @param userId
     * @return UserVo(根据实际情况定义Vo类)
     */
    public UserVo CodeAndName(String userId){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userId",userId);
        /*
        * 将records的List集合,使用自带方法把实体类中需要拼接的字段map(entity::get你需要的字段),
        * 再进行Collectors.toList(),即可获取所需的所有不重复的字段值
        */
        List<User> records = userService.list(queryWrapper);
        List<String> codeList = records.stream().map(User::getCode).collect(Collectors.toList());
        List<String> nameList = records.stream().map(User::getName).collect(Collectors.toList());
        /*
        * 自行定义出来的Vo类,参数只需要上面的get的需要字段copy至其中即可,
        * 后续用拼接好的用set把原来的值进行覆盖
        */
        ErrVo errVo = new ErrVo();
        //利用StringUtils,Java自带工具类.join(List<String>,"自行定义分割符号")进行拼接
        errVo.setErrCode(StringUtils.join(codeList,","));
        errVo.setErrName(StringUtils.join(nameList,","));
        return errVo;
    }

可以定义一个实体来接收值

import lombok.Data;

@Data
public class ErrVo {
    private String errCode;
    private String errName;
}

二、需要显示成树形图例

在这里插入图片描述
示例代码如下

    /**
     * 展示树形,errList:{
     *     errCode:"123",
     *     errName:"qwe"
     * }
     * @param ybjzlsh
     * @return
     */
    public List<ErrVo> errCodeAndName(String userId){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id",userId);
        List<User> userList = userService.list(queryWrapper);
        List<ErrVo> errVoList = new ArrayList<>();
        for(User user:userList){
            ErrVo errVo = new ErrVo();
            errVo.setErrCode(user.getErrCode());
            errVo.setErrName(user.getErrName());
            errVoList.add(errVo);
        }
        return errVoList;
    }

记得在Dto添加所有需要展示的字段名称

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDto extends User {
	/**	
	*	如果是以上的树形就需要添加一个List<ErrVo> errList,记得必须要new ArrayList<>(),
	*	new完之后就可以add,随后就可以以树形结构展示了
	*/
    private List<ErrVo> errList = new ArrayList<>();
}

下面需要用到集合去重

List去重方式

方式一:使用Java8特性去重(distinct)

    /**
     * List集合去重
     * @param list
     * @return
     */
    public List delRepeat(List list) {
        List newList = (List)list.stream().distinct().collect(Collectors.toList());
        return newList;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值