Сортировка многомерного символьного массива в Java - PullRequest
1 голос
/ 05 мая 2011

У меня есть процесс многомерного массива строк [100] [2], подобный следующему:

YB

CD

AB

BC

FE

EY

FD

YX

EG

Я хочу отсортировать его по первой букве столбца такчто конечный результат будет выглядеть так:

AB

BC

CD

EY

EG

FE

FD

YB

YX Я пытался использовать приведенный ниже код, но это не сработало:

Arrays.sort(process, new Comparator<String[]>() {
        @Override

        public int compare(final String[] entry1, final String[] entry2) {
                final String time1 = entry1[0];
                final String time2 = entry2[0];
                return time1.compareTo(time2);

        }
});

Вывод, который я получаюэто:

AB

BC

CD

EY

FE

YB

EG

FD

YX

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Следующий модульный тест демонстрирует работающую реализацию Comparator.Тест также распечатывает результат.

import java.util.Arrays;
import java.util.Comparator;

import junit.framework.TestCase;

public class ArrayTest extends TestCase {

    public class Sorter implements Comparator {
        public int compare(Object o1, Object o2){
            String[] arrayOne = (String[])o1;
            String[] arrayTwo = (String[])o2;
            return arrayOne[0].compareTo(arrayTwo[0]);
        }
    }

    public void testSort() {
        String[][] testData = {
                {"Y", "B"},
                {"C", "D"},
                {"A", "B"},
                {"B", "C"},
                {"F", "E"},
                {"E", "Y"},
        };

        Arrays.sort(testData, new Sorter());

        String[][] expectedOutput = {
                {"A", "B"},
                {"B", "C"},
                {"C", "D"},
                {"E", "Y"},
                {"F", "E"},
                {"Y", "B"},
        };

        for(int i = 0; i < testData.length; ++i) {            
            System.out.println(testData[i][0] + " " + testData[i][1]);
            assertEquals(expectedOutput[i][0], testData[i][0]);
            assertEquals(expectedOutput[i][1], testData[i][1]);            
        }
    }
}
1 голос
/ 05 мая 2011

Этот код (идентичный компаратор) работает как положено:

    String[][] arr = {{"B","L"},{"C","M"},{"Z","N"}};

    Arrays.sort(arr, new Comparator<String[]>() {
        @Override
        public int compare(final String[] entry1, final String[] entry2) {
            final String time1 = entry1[0];
            final String time2 = entry2[0];
            return time1.compareTo(time2);
        }
    });

Ваша проблема должна быть где-то еще.

0 голосов
/ 05 мая 2011

Возможно, лучше всего поместить оба символа в один и тот же элемент для каждой строки. Затем, когда вам нужны отдельные символы, используйте

String firstCharacter = myString.charAt(0);
String secondCharacter = myString.charAt(1);

и вы можете отсортировать одномерный массив так, как вам нравится.

...