1、上代码
//根据年号和号码进行正序联合排序
//年号升序
Comparator<ReplyInfoVo> year = Comparator.comparing(ReplyInfoVo::getCaseNo3);
//号码升序
Comparator<ReplyInfoVo> num = Comparator.comparing(ReplyInfoVo::getCaseNo4);
// 联合排序
Comparator<ReplyInfoVo> finalComparator = year.thenComparing(num);
replyInfoVoArrayList = replyInfoVoArrayList.stream().sorted(finalComparator).collect(Collectors.toList());
//单个的排序
caseInfoListVos = caseInfoListVos.stream().sorted(Comparator.comparing(CaseInfoListVo::getRegisterTime)。reversed()).collect(Collectors.toList());
可实现先按年的字段正序排列,再按号码正序排列,亲试可行。
2、详细讲解
3、如果上面排序不正确使用下面的,亲测可行,适用所有范围
package com.iflytek.sf.zlfy;
import com.iflytek.sf.zlfy.model.vo.NoticeReplyVo;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.collections4.comparators.ComparatorChain;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@SpringBootTest
class ZlfyApplicationTests {
public static void main(String[] args) {
List<NoticeReplyVo> replyInfoVoArrayList = new ArrayList<>();
NoticeReplyVo noticeReplyVo = new NoticeReplyVo();
noticeReplyVo.setReplyTimeLimit("已完成");
noticeReplyVo.setSortReplyTime(999);
noticeReplyVo.setCaseNo("浙政复(2022)7号");
noticeReplyVo.setCaseNo3("2022");
noticeReplyVo.setCaseNo4(7);
NoticeReplyVo noticeReplyVo1 = new NoticeReplyVo();
noticeReplyVo1.setReplyTimeLimit("还有59天到期");
noticeReplyVo1.setSortReplyTime(59);
noticeReplyVo1.setCaseNo("浙政复(2022)8号");
noticeReplyVo1.setCaseNo3("2022");
noticeReplyVo1.setCaseNo4(8);
NoticeReplyVo noticeReplyVo2 = new NoticeReplyVo();
noticeReplyVo2.setReplyTimeLimit("还有99天到期");
noticeReplyVo2.setSortReplyTime(99);
noticeReplyVo2.setCaseNo("浙政复(2022)50号");
noticeReplyVo2.setCaseNo3("2022");
noticeReplyVo2.setCaseNo4(50);
NoticeReplyVo noticeReplyVo3 = new NoticeReplyVo();
noticeReplyVo3.setReplyTimeLimit("已逾期");
noticeReplyVo3.setSortReplyTime(-999);
noticeReplyVo3.setCaseNo("浙政复(2022)15号");
noticeReplyVo3.setCaseNo3("2021");
noticeReplyVo3.setCaseNo4(15);
replyInfoVoArrayList.add(noticeReplyVo);
replyInfoVoArrayList.add(noticeReplyVo1);
replyInfoVoArrayList.add(noticeReplyVo2);
replyInfoVoArrayList.add(noticeReplyVo3);
Comparator mycmp1 = ComparableComparator.getInstance();
Comparator mycmp2 = ComparableComparator.getInstance();
mycmp1 = ComparatorUtils.nullHighComparator(mycmp1);
mycmp2 = ComparatorUtils.nullHighComparator(mycmp2);
ArrayList<Object> sortFields = new ArrayList<Object>();
sortFields.add(new BeanComparator("caseNo3", mycmp1)); //主排序(第一排序)
sortFields.add(new BeanComparator("caseNo4", mycmp2)); //次排序(第二排序)
// 创建一个排序链
ComparatorChain multiSort = new ComparatorChain(sortFields);
// 开始真正的排序,按照先主,后副的规则
Collections.sort (replyInfoVoArrayList , multiSort);
// for (NoticeReplyVo replyVo : replyInfoVoArrayList) {
// System.out.println("排序前:" + replyVo.getReplyTimeLimit() + ":" + replyVo.getCaseNo() + ":" + replyVo.getSortReplyTime());
// }
// Collections.sort(replyInfoVoArrayList, new Comparator<NoticeReplyVo>() {
// @Override
// public int compare(NoticeReplyVo o1, NoticeReplyVo o2) {
// int i = o1.getCaseNo3().compareTo(o2.getCaseNo3());
int i1 = o1.getCaseNo4().compareTo(o2.getCaseNo4());
// return i;
// }
// });
// Collections.sort(replyInfoVoArrayList, new Comparator<NoticeReplyVo>() {
// @Override
// public int compare(NoticeReplyVo o1, NoticeReplyVo o2) {
int i = o1.getCaseNo3().compareTo(o2.getCaseNo3());
// int i1 = o1.getCaseNo().compareTo(o2.getCaseNo());
// return i1;
// }
// });
// Collections.sort(replyInfoVoArrayList);
// Collections.reverse(replyInfoVoArrayList);
// for (NoticeReplyVo replyVo : replyInfoVoArrayList) {
// System.out.println("排序后:" + replyVo.getReplyTimeLimit() + ":" + replyVo.getCaseNo() + ":" + replyVo.getSortReplyTime());
// }
for (NoticeReplyVo replyVo : replyInfoVoArrayList) {
System.out.println("排序后:" + replyVo.getCaseNo3() + ":" + replyVo.getCaseNo4());
}
}
@Test
void contextLoads() {
}
}
成功,前面主排,后面次排。