对数组进行排序以获取其索引0处的指定元素

时间:2013-11-12 08:47:34

标签: java collections

我有一个String数组说

String [] my_array_list = { "SOMETHING1" , "SOMETHING2" , "ALCHOHAL", 
                        "SOMETHING3" , "ALL", "SOMETHING4" };

现在当我对此进行排序时说Arrays.sort( my_array_list );

然后我得到这样的输出:

ALCHOHAL
ALL
SOMETHING1
SOMETHING2 ... etc.

现在这是我的观点。
如果我需要在String数组的索引0处"ALL",我们需要做什么。即在我离开之前,总是需要{String}阵列第一个位置的"ALL"

在排序方法中是否有任何方法,或者我们需要为此做其他事情。

3 个答案:

答案 0 :(得分:4)

一种优雅的方法是定义一个Comparator,它有利于您的"ALL"字符串优先于其他字符串:

Arrays.sort(my_array_list, new Comparator<String>() {

  private static final String FIRST = "ALL";

  @Override
  public int compare(String o1, String o2) {
    if (o1.equals(FIRST)) {
      return -1;
    } else if (o2.equals(FIRST)) {
      return 1;
    } else {
      return o1.compareTo(o2);
    }
  }
});

如果您有许多类似的排序要做,您可能希望将此匿名Comparator重构为顶级类。添加一个带有“魔术”字的构造函数并确保它在排序中排在第一位是很简单的。

答案 1 :(得分:3)

你可以做什么:

  1. 从阵列中删除all
  2. 排序。
  3. 转换为ArrayList
  4. 索引为0的
  5. add all
  6. Convert它回到数组。

答案 2 :(得分:1)

最简单的解决方案是为"ALL"添加一个前缀,因此它始终是按字典顺序排列的。所有字符前面都有一个空格,因此您只需将其命名为" ALL"或类似"_ALL"。如果不这样做,你必须在排序或实现一个自定义比较器时以某种方式将其从数组中删除。