- 排序自定义
从小到大排列,-1:不交换,1交换,0不处理
outpatientPresentmhVM.getMlUltrasounds().stream().sorted((o1, o2) -> {
if (o1.getGestationalWeek() == null) {
return -1;
}
if (o2.getGestationalWeek() == null) {
return 1;
}
if (o1.getGestationalWeek() != null && o2.getGestationalWeek() != null) {
try {
String gestationalWeek1 = o1.getGestationalWeek();
String gestationalWeek2 = o2.getGestationalWeek();
if (CommonUtil.gestationalWeekToDays(gestationalWeek1) > CommonUtil.gestationalWeekToDays(gestationalWeek2)) {
return 1;
} else {
return -1;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}).collect(Collectors.toList());
2.分组
Map<Object, List<Map<String, Object>>> groupData = listMapData.stream().collect(Collectors.groupingBy(o -> o.get("age")));
Map<Object, List<Map<String, Object>>> grouptwoData = listMapData.stream().collect(Collectors.groupingBy(o -> o.get("age")+"_"+o.get("name")));
System.out.println("根据年龄分组后的数据:"+groupData);
System.out.println("根据年龄+姓名分组后的数据:"+grouptwoData);
3.分页
pregnancyInfo.stream().sorted(Comparator.comparing(HighRiskPregnancyVM::getDealWithStatus).reversed()).skip(page.getPageNumber() * page.getPageSize()).limit(page.getPageSize()).collect(Collectors.toList());
4.去重
stream的distinct去重方法,是根据 Object.equals,和 Object.hashCode这两个方法来判断是否重复的。
所以我们可以利用这个特性 ,重写pojo的 Object.equals,和 Object.hashCode这两个方法,来实现。
4.1、重写Object.equals方法
@Override
public boolean equals(Object o) {
UserPojo thisPojo = (UserPojo) o;
//只有name 和 address 相等,也算相等
if (this.getName().equals(thisPojo.getName()) && this.getAddress().equals(thisPojo.getAddress())){
return true;
}else {
return false;
}
}
4.2、重写Object.hashCode方法
@Override
public int hashCode() {
//根据name和address重新计算hashcode
int result = getName().hashCode();
//17是死值, jdk建议用17
result = 17 * result + getAddress().hashCode();
return result;
}
4.3、使用distinct去重
users = users.stream().distinct().collect(Collectors.toList());
参考:Stream distinct 根据list某个字段去重_stream根据某个字段去重_@大吉的博客-CSDN博客