先利用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<>();
}
下面需要用到集合去重
方式一:使用Java8特性去重(distinct)
/**
* List集合去重
* @param list
* @return
*/
public List delRepeat(List list) {
List newList = (List)list.stream().distinct().collect(Collectors.toList());
return newList;
}