У меня возникла небольшая проблема, связанная с сложной логикой, необходимой для работы программы.Длина 2D-массива внутри HashMap
Эта программа предназначена для сравнения «транзакций» между двумя папками. Каждая папка может содержать любое количество файлов, и каждый файл (XML-документ) может содержать любое количество транзакций. Каждая транзакция будет иметь 5 тегов.
Я должен сравнить две папки и посмотреть, соответствуют ли какие-либо транзакции.
Для этого я использую HashMap
и помещаю в него массив String[][]
. Каждый ключ в HashMap
будет представлять 1 файл. Строка в String будет представлять транзакцию, а столбцы будут представлять теги.
У меня возникли проблемы с выяснением способов доступа к String[][]
изнутри HashMap
. Мне нужно получить количество транзакций (строк).
Вот как я выше:
// Creating the HashMap and Array[][]
public static Map<Integer, String[][]> Pain008TransactionsCollection = new HashMap();
public static String[][] Pain008Transactions;
//Here is the logic where I populate the HashMap.
int transactionSize = EndToEndId.size();
//Creates a 2D array with one dimension for each transaction and six dimensions
//for relevant tags + filename.
Pain008Transactions = new String[transactionSize][6];
//For each transaction..
for(int i = 0; i < transactionSize; i++){
//Below will add each value into the 2D array for each transaction. Note that the
//filename is also added so that it can be easily associated with a transaction later.
Pain008Transactions[i][0]=EndToEndId.get(i);
Pain008Transactions[i][1]=InstdAmt.get(i);
Pain008Transactions[i][2]=MmbId.get(i);
Pain008Transactions[i][3]=DbtrNm.get(i);
Pain008Transactions[i][4]=OthrId.get(i);
Pain008Transactions[i][5]=GetFiles.pain008Files.get(currentFile).toString();
}
//Puts the 2D array into the collections map at the position of the current
//file in sequence.
Pain008TransactionsCollection.put(currentFile, Pain008Transactions);
System.out.println(Pain008TransactionsCollection);
Я знаю, что, чтобы получить общее количество HashMap
ключа я использую это:
Pain008TransactionsCollection.size()
и я знаю, чтобы получить строки для String [] [] Я использую
Pain008Transactions.length()
Но я не знаю, как назвать HashMap
, а затем получить длину строки для этого конкретного ключа.
Любая помощь была бы действительно оценена.
Здесь вам лучше ввести список настраиваемых объектов вместо создания 2D-массива. Таким образом, вы можете определить класс с 6 полями, которые вам нужны, а затем сохранить список экземпляров класса в списке. И не используйте необработанные типы, используйте 'new HashMap <>()' вместо 'new HashMap()'. –
Просмотрите руководства по стилю java-кодирования. Переменные имена идут camelCase (поэтому они никогда не запускают UpperCase). Это также плохая идея поместить что-то вроде «коллекции» в имя переменной. Почему бы не «transactionByIndex» или что-то в этом роде ?! – GhostCat
И подумать об этом: звучит странно **, что ваш ключ карты должен быть целым? Вероятно, вам следует еще шагнуть назад и попытаться ввести ** больше ** абстракций. Например: класс, представляющий ** трансляцию **. Этот класс знает о 5 атрибутах; и имеет методы сравнения двух транзакций, например. Итак: уберитесь от низкоуровневых двухмерных строковых массивов. В противном случае вы потратите ** много времени ** написание ** много ** низкоуровневого массива-манипуляционного кода. Это станет кошмаром для обслуживания в тот момент, когда вы закроете свой редактор. – GhostCat