Stream常用的一切操作
一种类型转另一种
代码语言:javascript
复制List<HmsAdviceRecord> records = hmsAdviceRecordService.list(new LambdaQueryWrapper<HmsAdviceRecord>().in(HmsAdviceRecord::getRelationCode, collect));
List<HmsAdviceRecordVo> redList =JSON.parseArray(JSON.toJSONString(records), HmsAdviceRecordVo.class);
根据对象泛型的某一个字段去重
代码语言:javascript
复制List<HmsPlanDetail> collect =
list.stream().
collect(Collectors.collectingAndThen(Collectors.
toCollection(() -> new TreeSet<>(Comparator.comparing(HmsPlanDetail::getDoctorId))), ArrayList::new));
List转成Map数据(key : value)
代码语言:javascript
复制List<Map<String, Object>> mapList = collect.stream().map((h) -> {
Map<String, Object> map = new HashMap<>();
map.put("id", h.getDoctorId());
map.put("value", h.getDoctorName());
return map;
}).collect(Collectors.toList());
Filter过滤操作
代码语言:javascript
复制filter(f -> f.getStatus().equals(InpatientStatus.ING))
根据某组特定数据分类分类完成后变Map集合
代码语言:javascript
复制List<HmsAdviceRecordVo> redList = JSON.parseArray(JSON.toJSONString(records), HmsAdviceRecordVo.class);
Map<String, List<HmsAdviceRecordVo>> listMap = redList.stream().collect(Collectors.groupingBy(HmsAdviceRecordVo::getBed));
遍历替换操作取代传统的if比较
代码语言:javascript
复制hmsDrugProjects.stream()
.filter(d -> e.getProjectId().equals(d.getId()))
.findFirst()
.ifPresent(d -> e.setFormat(d.getFormat()));
});
//方法查找第一个满足条件的元素,并将其封装在Optional对象中。
//最后,如果Optional对象中存在元素,则使用.ifPresent()方法将该元素的格式设置为变量"e"的格式。
Peek中间操作
代码语言:javascript
复制voList = voList.stream().peek(record -> {
Optional<HmsInpatient> inpatient = list.stream()
.filter(hmsInpatient -> record.getRelationCode().equals(hmsInpatient.getInpatientCode()))
.findFirst();
inpatient.ifPresent(hmsInpatient -> {
record.setName(hmsInpatient.getName());
record.setAge(hmsInpatient.getAge());
record.setBed(hmsInpatient.getBed());
record.setWards(hmsInpatient.getWards());
});
}).collect(Collectors.toList());
voList = voList.stream().peek(e -> {
Optional<HmsAdviceDrug> drug = drugs.stream()
.filter(d -> e.getId().equals(d.getAdviceId()))
.findFirst();
drug.ifPresent(d -> e.setNum(d.getNum()));
}).collect(Collectors.toList());
//这段代码使用了Java 8中的Stream API来对一个列表进行操作。
//首先,它使用了stream()方法将列表转换为一个流,
//然后使用peek()方法对每个元素进行操作,而不改变流中的元素。
//在第一个peek()中,它使用了filter()方法来过滤出与当前元素关联代码相同
//的HmsInpatient对象,然后使用findFirst()方法获取第一个匹配的对象。
//如果找到了匹配的对象,它会使用ifPresent()方法对该对象进行操作,
//将其名称、年龄、床位和病房设置为当前元素的相应属性。
//在第二个peek()中,它使用了类似的方法来过滤出与当前元素ID相同的HmsAdviceDrug对象,
//然后将其数量设置为当前元素的相应属性。最后,它使用collect()方法将流转换回列表并将其赋值给voList变量。
Of操作多个字段判断拼接
代码语言:javascript
复制operationApplyReqs.forEach((e) -> {
e.setGeneralTerm(Stream.of(e.getOperationNameOne(), e.getOperationNameTwo(), e.getOperationNameThree(), e.getOperationNameFour())
.filter(Objects::nonNull)
.collect(Collectors.joining()));
e.setGeneralTermOfParts(Stream.of(e.getPositionOne(), e.getPositionTwo(), e.getPositionThree())
.filter(Objects::nonNull)
.collect(Collectors.joining()));
});
//Stream.of方法将元素的属性转换为一个流,filter方法过滤掉空值,
//Collectors.joining方法将非空值连接成一个字符串。
Calendar日期操作
代码语言:javascript
复制SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 多态
Calendar calendar = Calendar.getInstance();
calendar.setTime(req.getInHospitalTime());
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date dayDeFore = calendar.getTime();
//前一天日期
String before = df.format(dayDeFore);