繁体   English   中英

基于字符串Java排序

[英]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进行上述排序吗?

如果要按预定义的顺序排序(即,您已经牢记了一些固定的字符串顺序),则可以这样进行:

  1. 设置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); 等等。
  2. 现在,按如下所示编写Comparator 比较两个String实例st ,您都在HashMap进行查找,并通过它们映射到的值进行比较。 因此,如果您要比较ApplePlum ,则需要查找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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM