创建一个可以对字符串/整数数组进行排序的算法。

3
我正在尝试找出如何制作一个排序函数,它可以按降序对数组进行排序。
public void dsort(String field) throws DataSetException {
    int front = 0;
    int findex = -1;

    String[] tosort = new String[50];
    for (int i = 0; i < filedata[0].length; i++) {
        if (field.equalsIgnoreCase(filedata[0][i])) {
            findex = i;
        }
    }
    if (findex == -1) {
        throw new DataSetException();
    } else {
        for (int k = 0; k < getNumRecords(); k++) {
            if (filedata[k][findex] != null) {
                tosort[front] = filedata[k][findex];
                front++;
            }
        }
        Comparator comparator = Collections.reverseOrder();
        Arrays.sort(tosort, comparator);
        System.out.println(Arrays.asList(tosort));
    }
}

这个函数的作用是从一个数组中取出元素,创建一个新的数组,这正是我想要的。然而,我的排序输出结果却像32、3、25、20、2、1000和1等等。 这些“整数”被视为字符串,而这个排序函数也应该能够将单词作为字符串进行排序。我认为我应该尝试使用comparable,但我不确定如何在这种情况下实现它。

2个回答

2
如果一切都是数字,那么您不希望将它们存储为字符串,而是将它们存储为数字,然后使用数字排序。另一方面,如果您有一些字符串的组合,其中一些是数字,一些是字母,我建议使用类似于AlphanumComparator的东西,可以在此处找到:这里

哪一部分?将数据存储为数字,一旦你有了它们的数字就进行排序,还是实现一个AlphanumComparator? - JohnnyO

0

使用Google Guava

List<String> sortedList = Ordering.natural().reverse().onResultOf(new Function<String, Integer>() {
  @Override public Integer apply(String input) {
    return Integer.valueOf(input); // assumes input is always valid
  }
}).immutableSortedCopy(Iterables.concat(listOfLists));

或者类似的东西。 Iterables.concat 将接受一个可迭代的可迭代对象,将其转换为单个可迭代对象。你可能需要将你的数组数组转换为列表列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接