【发布时间】:2016-12-15 22:01:31
【问题描述】:
如何实现对字段名内容的自定义排序:
- 第一个元素:P 后跟数字 [1-9]{2} 始终在第一个
- 后跟:P 后跟数字 0[0-9]
- 后跟:S
- 后跟数字 [1-9]{2}
-
然后其余的按正常顺序
i1.getName().compareToIgnoreCase(i2.getName())private static Comparator<Item> itemComperator = new Comparator<Item>() { @Override public int compare(Item i1, Item i2) { if (i1.getName().matches("P[1-9]{2}") && i2.getName().matches("P0[0-9]")) return -1; else if (i1.getName().matches("S[1-9]{2}")) return -1; else return i1.getName().compareToIgnoreCase(i2.getName()); } }; @Test public void sortItem() { Item item01 = new Item(1, "R59"); Item item02 = new Item(2, "S48"); Item item03 = new Item(3, "P01"); Item item04 = new Item(4, "P25"); Item item05 = new Item(5, "R99"); List<Item> items = Arrays.asList(item01, item02, item03, item04, item05); System.out.println("before sorting"); long seed = System.nanoTime(); Collections.shuffle(items, new Random(seed)); for (Item i : items) { System.out.println(i.getId() + " " + i.getName()); } System.out.println("after sorting"); Collections.sort(items, itemComperator); for (Item i : items) { System.out.println(i.getId() + " " + i.getName()); } } public class Item { private int id; private String name; public Item(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
预期输出:
after sorting
4 P25
3 P01
2 S48
1 R59
5 R99
【问题讨论】:
-
您能否在问题中包含所需的输出.. ???
标签: java sorting comparator