Почему 10 в начале ArrayList после Sort () - PullRequest
3 голосов
/ 31 августа 2010

Поскольку вопрос говорит, что у меня есть эта проблема. Я знаю, почему это в начале, потому что это 1 и 0, поэтому его до 9 даже после сортировки. Но может ли он быть в правильном порядке с помощью метода списков sort()?

Ответы [ 8 ]

12 голосов
/ 31 августа 2010

Вам необходимо изменить список, чтобы он содержал числа (например, Integer s или Double s) вместо строк.

3 голосов
/ 31 августа 2010

Если по какой-то причине в списке должно быть String с (мне это кажется маловероятным), один из вариантов (с использованием Гуава ):

List<String> numbers = ...;
Collections.sort(numbers, Ordering.natural().onResultOf(
    new Function<String, Integer>() {
      public Integer apply(String from) {
        return Integer.valueOf(from);
      }
    }));

список строк на основе целочисленного значения, которое представляет каждая строка.Если не каждая строка может быть проанализирована как целое число, будет выдано исключение.

1 голос
/ 31 августа 2010

Еще одно предложение:

Вы можете реализовать Comparator<String> для поддержки алгоритма сортировки, если вам нужно придерживаться String и не хотите использовать Number или эквивалентные классы. Таким образом, вы можете сортировать элементы по мере необходимости.

0 голосов
/ 31 августа 2010

Лексикографический порядок последовательностей.

0 голосов
/ 31 августа 2010

Я не мог этого понять, потому что я создавал целые числа, а не строки, но это не сработало.

Но потом я увидел небольшую ошибку в своем коде и забыл Integer.parseint(String), который был закомментирован.

Ответы, ребята, были полезны в любом случае, и множество других способов подойти к этому.

0 голосов
/ 31 августа 2010

Java изначально не поддерживает естественную сортировку String объектов так, как вам может понадобиться.См. Java Trail об этом.Основная причина в том, что это было бы слишком сложно сделать из-за множества разных языков и т. Д. Поэтому предыдущие ответы, касающиеся изменения List<String> на List<Integer> или List<Double>, возможно, являются лучшей идеей.

Однако, этот вопрос о Stackoverflow может быть вам полезен.

0 голосов
/ 31 августа 2010

Как уже говорили другие, если вы собираетесь сортировать фактические числа, не храните их в строках. Если вы действительно хотите сортировать строки, содержащие числа естественным образом, я предпочитаю использовать Apache Commons Collection Utils ComparatorUtils.NATURAL_COMPARATOR, хотя есть и другие варианты с различной конфигурацией и функциональностью.

0 голосов
/ 31 августа 2010

Если вы сортируете строки вместо чисел, этот код может помочь вам понять разницу:

    ArrayList stringList = new ArrayList();
    stringList.add("9");
    stringList.add("10");
    Collections.sort(stringList);
    Assert.assertEquals("10", stringList.get(0));

    ArrayList integerList = new ArrayList();
    integerList.add(9);
    integerList.add(10);
    Collections.sort(integerList);
    Assert.assertEquals(9, integerList.get(0));

Утверждение с утверждениями JUnit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...