[英]Sorting based on string java
我有一个需要基于string
排序的对象list
。
列表中的每个对象将包含以下内容
e.g.
fruitType = Pear
fruitType = Mango
fruitType = Apple
fruitType = Apple
fruitType = Mango
现在,说我想先按“ Apple
”订购,然后按“ Mango
”订购。 因此,苹果排在第一位,其次是芒果。
我可以做一个普通的asc / desc排序,但这还不够。 也可以使用apache commons进行上述排序吗?
如果要按预定义的顺序排序(即,您已经牢记了一些固定的字符串顺序),则可以这样进行:
HashMap<String,Integer> sortTable
。 将所有字符串放入其中,并按排序顺序将每个字符串映射到其索引。 如果您首先要使用Apple
,然后是Mango
,然后是Plum
等,则添加以下内容: sortTable.put("Apple",0); sortTable.put("Mango",1); sortTable.put("Plum",2);
sortTable.put("Apple",0); sortTable.put("Mango",1); sortTable.put("Plum",2);
等等。 Comparator
。 比较两个String
实例s
和t
,您都在HashMap
进行查找,并通过它们映射到的值进行比较。 因此,如果您要比较Apple
和Plum
,则需要查找Apple
并发现它映射为0
; 您查找Plum
,发现它映射到2
; 然后return Integer.compare(0,2)
。 换句话说,您的Comparator
使用:
public int compare(String x, String y) {
return Integer.compare(sortTable.get(x), sortTable.get(y));
}
这样,您就可以在列表中使用Collections.sort
,并将您创建的Comparator
传递给它。
注意,您需要某种策略来处理未在预定义列表中的String
,或者需要某种保证永远不会发生的策略。
public class Fruit implements Comparable<Fruit> {
private String whatYouWantToSortBy;
...
public int compareTo(Fruit other) {
return whatYouWantToSortBy.compareTo(other.whatYouWantToSortBy);
}
}
要排序,请使用Collections.sort
。 或者,您可以只使用一种自动对自身进行排序的List类型,例如TreeSet。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.