一、 单列排序
modelList.sort(Comparator.comparing(TypeModel::getInnerType));
modelList.sort(new Comparator<TypeModel>() {
@Override
public int compare(TypeModel o1, TypeModel o2) {
return o1.getInnerType().compareTo(o2.getInnerType());
}
});
flowVos.sort(new Comparator<FlowVo>() {
@Override
public int compare(FlowVo o1, FlowVo o2) {
return o1.getNumber() - o2.getNumber();
}
});
Collections.sort(modelList, (TypeModel o1, TypeModel o2) -> {
String t1 = o1.getProposeTime();
String t2 = o2.getProposeTime();
return t1.compareTo(t2);
});
二、多列排序
List<Student> collect2 = list.stream()
.sorted(Comparator.comparing(Student::getAge).reversed().thenComparing(Student::getScore))
.collect(Collectors.toList());
List<PNumModel> newTrimList = toTrimList.stream()
.sorted(Comparator.comparing(PNumModel::getErrNum)
.thenComparing(PNumModel::getCode).reversed())
.collect(Collectors.toList()); //注意,最后reversed,如果两个就恢复没有的了
org.apache.commons.collections.comparators
public static ComparatorChain getComparatorChain() {
final Comparator myCmp1 = ComparatorUtils.reversedComparator(ComparableComparator.INSTANCE); //倒序
final Comparator myCmp2 = ComparatorUtils.nullHighComparator(ComparableComparator.INSTANCE); //允许null,正序递增排列
// 声明要排序的对象的属性,并指明所使用的排序规则,如果不指明,则用默认排序
ArrayList<Object> sortFields = new ArrayList<Object>();
sortFields.add(new BeanComparator("code", myCmp1)); //主排序(第一排序)
sortFields.add(new BeanComparator("createTime", myCmp2)); //次排序(第二排序)
// 创建一个排序链
return new ComparatorChain(sortFields);
}
final ComparatorChain multiSort = getComparatorChain();
Collections.sort(ModelList, multiSort);
三、List转换与过滤
List<PNumModel> top5List = trimList.stream()
.filter(PNumModel -> (PNumModel.getErrNum() != 0))
.collect(Collectors.toList());
List<Po> plazas = trimList.stream().filter(p -> Util.checkR(p.getCode()) && Util.checkP(p.getCode())).collect(Collectors.toList());
抽取字段转换为新List
List<String> nameList = studentList.stream().map(StudentInfo::getName).collect(Collectors.toList());
抽取字段并求和
int total = List.stream().mapToInt(entity::getDistance).sum();
四、List 转Map
Map<String, TbSeller> tbSellerMap = tbSellers.stream().collect(Collectors.toMap(TbSeller::getSellerId, Function.identity(), (k1, k2) -> k1)); //合并按初始值
Map<String,Long> yMap = trendHourPos.stream()
.filter(p->p.getDt().equals(yesterday)).collect(Collectors.toMap(p->p.getHour(), v->v.getCv(), (oldVal, currVal) -> currVal)); //合并按最新值
Map<String,Long> yestdayTrendHourMap = trendHourPos.stream()
.filter(p->p.getDt().equals(yesterday)).collect(Collectors.toMap(p->p.getHour(), v->v.getCv(), (oldVal, currVal) -> (currVal+oldVal)));
Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Person::getId,
p -> {
List<String> getNameList = new ArrayList<>();
getNameList.add(p.getName());
return getNameList;
},
(List<String> value1, List<String> value2) -> {
value1.addAll(value2);
return value1;
}
)); //合并为List
Map<String, List<TaskPo>> ppMap = plazs.stream()
.collect(Collectors.toMap(TaskPo::getCenterCode, p -> {
List<TaskPo> ppList = new ArrayList<>();
ppList.add(p);
return ppList;
}, (List<TaskPo> value1, List<TaskPo> value2) -> {
value1.addAll(value2);
return value1;
})); //合并为List
Map<String, HourTodayPo> dtCvMap = timeList.stream()
.collect(Collectors.groupingBy(HourTodayPo::getHour,
Collectors.collectingAndThen(Collectors.toList(), value -> value.get(value.size()-1)))); //按字段分组成map并取最后一个
Map<String, Long> dtCvMap = timeList.stream()
.collect(Collectors.groupingBy(HourTodayPo::getHour,
Collectors.collectingAndThen(Collectors.toList(), value -> {
long total = value.stream().mapToLong(HourTodayPo::getCv).sum();
return total;
})));//按字段分组成map,然后按自定义逻辑取值