Удалить столбец из 2D-массива в Java

У меня есть массив 2D-строк в java, где я - строки, а j - столбцы.

Я ищу элегантное решение для удаления столбцов в следующем массиве.

String[i][j] data; 

Предоставленные столбцы могут быть либо одним столбцом, либо несколькими столбцами, т.е. если удаляемые столбцы (7,8), то все значения данных [i][7] и данных [i][8] должны быть удалены из массив.

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

В общем, если вы собираетесь изменять размер, не используйте массив — используйте ArrayList или другой более гибкий тип. (На самом деле, в 90% случаев я бы просто использовал один из них для начала. Массивы - это боль.)

Edward Peters 21.11.2022 22:57

Дасир, согласен. Но в этом случае у меня есть данные, поступающие откуда-то еще, и, к сожалению, в данный момент я ничего не могу с этим поделать. :( @ЭдвардПитерс

rizzanimran 21.11.2022 22:58

Нужно ли хранить данные в виде массива? Если он приходит как один, но будущее данных зависит от вас после этого момента, я бы сказал, что их стоит преобразовать. Если вам нужно вывести измененные данные в том же формате, возможно, стоит преобразовать их в любом случае, а затем преобразовать обратно. Если вам нужно более элегантное решение, возможно, это оно. (Это может быть медленнее, если это большие массивы, но это, вероятно, не то, о чем вам нужно беспокоиться.) Если ArrayList просто не существует, да, возможно, просто создайте новый массив и скопируйте.

Edward Peters 21.11.2022 23:01
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
Принципы SOLID - лучшие практики
Принципы SOLID - лучшие практики
SOLID - это аббревиатура, обозначающая пять ключевых принципов проектирования: принцип единой ответственности, принцип "открыто-закрыто", принцип...
gRPC на Android с использованием TLS
gRPC на Android с использованием TLS
gRPC - это относительно новая концепция взаимодействия между клиентом и сервером, но не более.
1
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пожалел тебя и написал это. Я думаю, что это то, что "элегантно" выглядит в Java?

import java.util.*;
import java.util.stream.*;

class ArrayMangler {
    public static void main(String[] args) {
        String[] sample1 = {"Adam", "Bob", "Charlie", "Donald"};
        String[] sample2 = {"Ernst", "Ferdinand", "Godfrey", "Hrothgar"};
        String[] sample3 = {"Iago", "Jormangandr", "Killroy", "Lorelei"};
        String[][] input = {sample1, sample2, sample3};
        
        List<Integer> badIndexes = Arrays.asList(1, 3);
        String[][] output = removeColumns(input, badIndexes);
        for (String[] row : output){
            System.out.println(Arrays.toString(row));
        }
        
    }
    public static String[][] removeColumns(String[][] input, List<Integer> indexesToTrim){
        return Arrays.stream(input)
            .map(arr -> removeFromRow(arr, indexesToTrim))
            .toArray(String[][]::new);
    }
    public static String[] removeFromRow(String[] input, List<Integer> indexesToTrim){
        return IntStream
            .range(0,input.length)
            .filter(i ->!indexesToTrim.contains(i))
            .mapToObj(i -> input[i])
            .toArray(String[]::new);
    }
}

Другие вопросы по теме