应用场景:用户钱包明细列表导出,包含用户基本信息:手机号、昵称、姓名。
1、用户服务:
/**
* 根据用户uid集合查询用户信息
*
* @param uid
* @return
*/
List<UserExternalResponse> getUserInfoByUid(List<Long> uid);
@Data
public class UserExternalResponse implements Serializable {
@ApiModelProperty(value = "用户ID")
private Long uid;
@ApiModelProperty(value = "会员昵称")
private String nickName;
@ApiModelProperty(value = "真实姓名")
private String trueName;
@ApiModelProperty(value = "手机号")
private String mobile;
}
2、钱包服务:
@Data
public class ExportUserPurseDetailResponse implements Serializable {
@ExcelProperty("会员ID")
@ApiModelProperty(value = "会员ID")
private Long uid;
@ExcelProperty("用户姓名")
@ApiModelProperty(value = "用户姓名")
private String realName;
@ExcelProperty("用户昵称")
@ApiModelProperty(value = "用户昵称")
private String nickName;
@ExcelProperty("手机号码")
@ApiModelProperty(value = "手机号码")
private String mobile;
@ExcelProperty("收入(元)")
@ApiModelProperty(value = "收入(元)")
private String inAmount;
@ExcelProperty("支出(元)")
@ApiModelProperty(value = "支出(元)")
private String outAmount;
@ExcelProperty("创建时间")
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ExcelProperty("类型")
@ApiModelProperty(value = "类型")
private String typeStr;
@ExcelProperty("描述")
@ApiModelProperty(value = "描述")
private String remark;
}
List<UserPurseDetail> userPurseDetails = userPurseDetailMapper.selectList(queryWrapper);
List<ExportUserPurseDetailResponse> list = new ArrayList<>();
//List<Long> uidList = new ArrayList<>();
userPurseDetails.forEach(userPurseDetail -> {
ExportUserPurseDetailResponse exportUserPurseDetailResponse = new ExportUserPurseDetailResponse();
BeanUtils.copyProperties(userPurseDetail, exportUserPurseDetailResponse);
//uidList.add(userPurseDetail.getUid());
list.add(exportUserPurseDetailResponse);
});
//根据用户uid集合查询用户信息
//List<UserExternalResponse> userExternalResponses = iUserExternalService.getUserInfoByUid(uidList);
//根据用户uid集合查询用户信息
List<UserExternalResponse> userExternalResponses = iUserExternalService.getUserInfoByUid(userPurseDetails.stream().map(UserPurseDetail::getUid).collect(Collectors.toList()));
//插入数据
purseDetailResponseList(list, userExternalResponses);
/**
* Java 8 Stream流对集合List合并数据
*/
private static void purseDetailResponseList(List<ExportUserPurseDetailResponse> purseDetailResponses, List<UserExternalResponse> externalResponses) {
purseDetailResponses.stream().map(purseDetailResponse -> {
return externalResponses.stream().filter(externalResponse -> {//条件判断
return purseDetailResponse.getUid() == externalResponse.getUid();
}).map(externalResponse -> {
purseDetailResponse.setNickName(externalResponse.getNickName());
purseDetailResponse.setRealName(externalResponse.getTrueName());
purseDetailResponse.setMobile(externalResponse.getMobile());
return purseDetailResponse; //返回的结果
}).collect(Collectors.toList());
}).flatMap(List::stream).collect(Collectors.toList());
}
常用方式:
List<UserPurseDetail> userPurseDetails = userPurseDetailMapper.selectList(queryWrapper);
List<ExportUserPurseDetailResponse> list = new ArrayList<>();
//根据用户uid集合查询用户信息
List<UserExternalResponse> userExternalResponseList = iUserExternalService.getUserInfoByUid(userPurseDetails.stream().map(UserPurseDetail::getUid).collect(Collectors.toList()));
Map<Long, UserExternalResponse> userExternalResponseMap = userExternalResponseList.stream().collect(Collectors.toMap(UserExternalResponse::getUid, u -> u));
userPurseDetails.forEach(userPurseDetail -> {
ExportUserPurseDetailResponse exportUserPurseDetailResponse = new ExportUserPurseDetailResponse();
BeanUtils.copyProperties(userPurseDetail, exportUserPurseDetailResponse);
//方式二
UserExternalResponse userExternalResponse = userExternalResponseMap.getOrDefault(userPurseDetail.getUid(), new UserExternalResponse());
exportUserPurseDetailResponse.setNickName(userExternalResponse.getNickName() == null ? "" : userExternalResponse.getNickName());
exportUserPurseDetailResponse.setRealName(userExternalResponse.getTrueName() == null ? "" : userExternalResponse.getTrueName());
exportUserPurseDetailResponse.setMobile(userExternalResponse.getMobile() == null ? "" : userExternalResponse.getMobile());
// //方式三
// UserExternalResponse userExternalResponse = userExternalResponseMap.getOrDefault(userPurseDetail.getUid(), null);
// if (userExternalResponse != null) {
// exportUserPurseDetailResponse.setNickName(userExternalResponse.getNickName());
// exportUserPurseDetailResponse.setRealName(userExternalResponse.getTrueName());
// exportUserPurseDetailResponse.setMobile(userExternalResponse.getMobile());
// }
list.add(exportUserPurseDetailResponse);
});