Java對象集合按照指定元素順序排序的實現(xiàn)
需求背景
最近在對一個集合列表的數(shù)據(jù)進行排序,需求是要集合數(shù)據(jù)按照一個排序狀態(tài)值進行排序,而這個狀態(tài)值,不是按照從小到大這樣的順序排序的,而是要按照特定的順序,比如按照1, 0, 2
的順序排的,所以需要自定義一個排序工具類來實現(xiàn)
解決方案
寫一個排序工具類
package cn.nzp.ems.ecb.server.business.screen; import java.io.Serializable; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class CustomizeNumComparator implements Comparator<Integer>, Serializable { private static final long serialVersionUID = 6076418974912880405L; List<Integer> numList = Stream.of(1, 0, 2).collect(Collectors.toList()); @Override public int compare(Integer o1, Integer o2) { int i1 = numList.indexOf(o1); int i2 = numList.indexOf(o2); return (i1 == -1 || i2 == -1) ? (i2 - i1) : i1 - i2; } }
測試一下排序
@Test public void testCompare() { List<RecordDto> list = Lists.newArrayList(); RecordDto record01= new RecordDto(); record01.setOrderNum(2); record01.setSName("測試名稱1"); RecordDto record02= new RecordDto(); record02.setOrderNum(0); record02.setSName("測試名稱2"); RecordDto record03 = new RecordDto(); record03.setOrderNum(1); record03.setSName("測試名稱3"); RecordDto record04= new RecordDto(); record04.setOrderNum(2); record04.setSName("測試名稱4"); RecordDto record05= new RecordDto (); record05.setOrderNum(0); record05.setSName("測試名稱5"); list.add(record01); list.add(record02); list.add(record03); list.add(record04); list.add(record05); list = list.stream() .sorted(Comparator.comparing(RecordDto::getOrderNum, new CustomizeNumComparator())) .collect(Collectors.toList()); list.stream().forEach(e -> { System.out.println(e.getName() +", " + e.getOrderNum()); }); }
跑一下測試結(jié)果
如果不想寫一個排序工具類,也可以創(chuàng)建一個Comparator
即可
public void testCompare() { List<Integer> numList = Stream.of(1, 0, 2).collect(Collectors.toList()); Comparator<RecordDto> comparingIndex = Comparator.comparing(record -> { final int index = numList.indexOf(record.getOrderNum()); return index == -1 ? Long.MAX_VALUE : index; }); list = list.stream() .sorted(comparingIndex.thenComparing(RecordDto::getCreateTime, Comparator.nullsLast(Date::compareTo))) .collect(Collectors.toList()); }
到此這篇關(guān)于Java對象集合按照指定元素順序排序的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java指定元素順序排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計模式之模板方法模式Template Method Pattern詳解
在我們實際開發(fā)中,如果一個方法極其復雜時,如果我們將所有的邏輯寫在一個方法中,那維護起來就很困難,要替換某些步驟時都要重新寫,這樣代碼的擴展性就很差,當遇到這種情況就要考慮今天的主角——模板方法模式2022-11-11如何獲取springboot打成jar后的classpath
這篇文章主要介紹了如何獲取springboot打成jar后的classpath問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07關(guān)于spring.factories的常用配置項說明
這篇文章主要介紹了關(guān)于spring.factories的常用配置項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07