对于stream流在项目中的实用方法
1.在列表中通过id查询出其他表的信息,将其插入到新的list中
//通过医院id查询表digic_admin中的医院的名称并且保存进去
Map<String, HrHospitalModel> hashMap = hospitalMapper.hospitalList().stream()
.collect(Collectors.toMap(HrHospitalModel::getHospitalId, obj -> obj, (key1, key2) -> key1));
for (CheckAnalysisDetailVo checkAnalysisDetailVo : checkAnalysisList) {
String hospitalId = checkAnalysisDetailVo.getHospitalId();
HrHospitalModel hospitalModel = hashMap.get(hospitalId);
checkAnalysisDetailVo.setHospitalName( hospitalModel.getHospitalName());
}
for (CheckAnalysisDetailVo checkAnalysisDetailVo : checkAnalysisDetailVos) {
String hospitalId = checkAnalysisDetailVo.getHospitalId();
LambdaQueryWrapper<HrHospitalModel> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(HrHospitalModel::getHospitalId,hospitalId);
HrHospitalModel hospitalModel= hospitalMapper.selectOne(lambdaQueryWrapper);
checkAnalysisDetailVo.setHospitalName( hospitalModel.getHospitalName());
}
2.将List<-integer>—》List<-String>
//医生数据总数 将List<Integer>---》List<String>
List<Integer> hosIdsInt = monitorHu.getHosIds();
List<String> hosIds = hosIdsInt.stream().map(String::valueOf).collect(Collectors.toList());
if (hosIds.isEmpty()) {
return null;
}
//调阅次数、iu_operate_detail 1234
Integer callNumber = iuOperateDetailMapper.selectCount(new QueryWrapper<IuOperateDetail>()
.and(wrapper -> wrapper.eq("operate_type_id", PatientOperateTypeEnum.CHECK_HISTORY_PATIENT.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_REPEAT_PATIENT.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_ID_CARD_DETAIL.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_LOCAL_HISTORY.getId())
).and(wrapper -> wrapper.ge("operate_time", startTime)
.le("operate_time", endTime)).in(ObjectUtil.isNotEmpty(hosIds), "hospital_id", hosIds)
);
3.将records的HospitalGetwayConfigRecord-》HospitalGetwayConfigRecordVo
目的:将HospitalGetwayConfigRecord把这里面的(前段)不要的字段变成前段要的Vo类返回
Page<HospitalGetwayConfigRecord> pageTemp = (Page<HospitalGetwayConfigRecord>) this.page(pageable, lambdaQueryWrapper);
List<HospitalGetwayConfigRecord> records = pageTemp.getRecords();
List<HospitalGetwayConfigRecordVo> recordsVo = new ArrayList<>();
//将records的HospitalGetwayConfigRecord-》HospitalGetwayConfigRecordVo
records.stream().forEach(a -> {
HospitalGetwayConfigRecordVo configRecordVo = new HospitalGetwayConfigRecordVo();
BeanUtil.copyProperties(a, configRecordVo);
recordsVo.add(configRecordVo);
});
4.对于sql中and()和or()拼接的用法
//调阅次数、iu_operate_detail 1234
Integer callNumber = iuOperateDetailMapper.selectCount(new QueryWrapper<IuOperateDetail>()
.and(wrapper -> wrapper.eq("operate_type_id", PatientOperateTypeEnum.CHECK_HISTORY_PATIENT.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_REPEAT_PATIENT.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_ID_CARD_DETAIL.getId())
.or()
.eq("operate_type_id", PatientOperateTypeEnum.CHECK_LOCAL_HISTORY.getId())
).and(wrapper -> wrapper.ge("operate_time", startTime)
.le("operate_time", endTime)).in(ObjectUtil.isNotEmpty(hosIds), "hospital_id", hosIds)
);
5.关于stream中的filter()方法
List<IuUserStatistics> iuDocStatisticsVos = monitoringPlatformService.queryDocByIdInfo(monitorHu);
//将几个字段都是0的值过滤了(选择字段不是0的是0的过滤掉)
List<IuUserStatistics> temp = iuDocStatisticsVos.stream()
.filter(s -> s.getCallNumber() != 0 || s.getHistoryNoticeNum() != 0 || s.getHisViewNum() != 0
|| s.getApplyNum() != 0 || s.getConsultationNum() != 0).collect(Collectors.toList());
log.info("筛选之后的{}", temp.size());
List<IuUserStatistics> results = new ArrayList<>();
results = CollectionUtil.sortPageAll(monitorHu.getPage(), monitorHu.getSize(),
(o1, o2) -> o2.getHistoryNoticeNum().compareTo(o1.getHistoryNoticeNum()), temp);