Java Изменение порядка элементов массива на основе столбцов Specifi c - PullRequest
0 голосов
/ 23 апреля 2020

У меня следующий массив извлечен из файла:

[ Car , House , Bike , Index0, Motor, Ski , Index1 , Hello ]

Я пытаюсь переупорядочить этот массив таким образом, чтобы я принудительно указывал c элементов (index0 -> 0 и index1 -> 1) для указания c позиций примерно так:

[ Index0 , Index1, Bike , Car, Motor, Ski , House, Hello ]

До сих пор я был в состоянии извлечь информацию, прочитать массив и получить правильный индекс, но, похоже, знает, как продолжить замену элементов :

    static void loadHeaderSettingName() throws IOException {
    System.out.println("Loading the header settings name [Value][ColIndex]");
    FileInputStream excelFile = new FileInputStream(new File(excelFilePath));
    Workbook workbook = new XSSFWorkbook(excelFile);
    Sheet sheet = workbook.getSheetAt(0);
    Row row = sheet.getRow(0);

    for (Cell cell : row) {
        headerArray.add(cell.getStringCellValue().trim());
    }

    String index0="Index0";
    String index1="Index1";

    System.out.println(headerArray.toString());

    for (int i=0; i <headerArray.size(); i++ ) {
        System.out.println(headerArray.get(i) + " " + i);

        if (headerArray.get(i).equals(index0)) {
            System.out.println("hi");
        }
    }
}

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Возможно, вы ищете что-то подобное в вашей л oop. Но это не универсальное c решение. Как и в этом подходе, если вы хотите поменять местами какой-либо другой индекс, кроме 0 и 1, вам нужно будет добавить еще одно if условие

    for( int i = 0; i < headerArray.size(); i++ )
    {
        String temp;
        if( headerArray.get( i ).equalsIgnoreCase( index0 ) )
        {
            temp = headerArray.get( i );
            headerArray.set( i, headerArray.get( 0 ) );
            headerArray.set( 0, temp );
        }
        else if( myArr[i].equalsIgnoreCase( index1 ) )
        {
            temp = headerArray.get( i );
            headerArray.set( i, headerArray.get( 1 ) );
            headerArray.set( 1, temp );
        }
    }
    System.out.println ( headerArray );
0 голосов
/ 23 апреля 2020

Я смог решить следующим образом

String index0 = "index0";
    int index0_NEW_POSITION = 0;

    String  index1 = "index0";
    int  index1_COLUMN_NEW_POSITION = 1;

    int arraySizeBeforeColumnReordering = array.length;
    System.out.println("BEFORE: " + java.util.Arrays.toString(array));

    for (int i=0; i <array.length; i++ ) {

        if (array[i].equals(index0)) {
            int original_position = i;
            String tmp_original_postion_0 = array[original_position];
            array[original_position]=array[index0_NEW_POSITION];    
            array[index0_NEW_POSITION] = tmp_original_postion_0;
        }

        if (array[i].equals(index1)) {
            int original_position = i;
            String tmp_original_postion_0 = array[original_position];
            array[original_position]=array[index1_COLUMN_NEW_POSITION]; 
            array[index1_COLUMN_NEW_POSITION] = tmp_original_postion_0;
        }

        }

    int arraySizeAfterColumnReordering = array.length;
    System.out.println("AFTER: " + java.util.Arrays.toString(array));

    if (arraySizeBeforeColumnReordering == arraySizeAfterColumnReordering){
        System.out.println("The count of column before and after the column ordering is still the same: " + arraySizeBeforeColumnReordering);
    } else {
        System.out.println("The count of column before and after the column ordering is no longer the same");
        System.out.println("The count of column before: " +  arraySizeBeforeColumnReordering);
        System.out.println("The count of column after: " + arraySizeAfterColumnReordering);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...