Ich habe ein wenig Mühe, herauszufinden, einige komplizierte Logik für ein Programm bei der Arbeit erforderlich.Länge eines 2D-Arrays in einer HashMap
Dieses Programm wurde entwickelt, um "Transaktionen" zwischen zwei Ordnern zu vergleichen. Jeder Ordner kann eine beliebige Anzahl von Dateien enthalten und jede Datei (XML-Dokument) kann eine beliebige Anzahl von Transaktionen enthalten. Jede Transaktion hat 5 Tags.
Ich muss zwei Ordner vergleichen und sehen, ob Transaktionen übereinstimmen.
Um dies zu tun, verwende ich eine HashMap
und setzen Sie eine String[][]
Array innerhalb davon. Jeder Schlüssel in HashMap
wird 1 Datei darstellen. Die Zeile im String repräsentiert eine Transaktion und die Spalten repräsentieren die Tags.
Ich habe Probleme herauszufinden, wie auf die String[][]
von innerhalb der HashMap
zugreifen. Ich muss die Anzahl der Transaktionen (Zeilen) ermitteln.
Hier ist, wie ich die oben tun:
// 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);
Ich weiß, dass die Gesamtzahl der HashMap
Schlüssel des ich diese benutzen Sie:
Pain008TransactionsCollection.size()
und ich kenne die Zeilen für die bekommen String [] [] ich benutze
Pain008Transactions.length()
Aber ich bin nicht sicher, wie dieanrufen 0 Schlüssel und dann die Zeilenlänge für diesen bestimmten Schlüssel.
Jede Hilfe würde wirklich geschätzt werden.
Sie sollten hier lieber eine Liste von benutzerdefinierten Objekten anstelle von 2D-Array erstellen. Sie können also eine Klasse mit 6 Feldern definieren, die Sie benötigen, und dann die Liste der Klasseninstanzen in der Liste speichern. Und verwende keine rohen Typen, benutze 'new HashMap <>()' anstelle von 'new HashMap()'. –
Schauen Sie in Java-Code-Stil-Anleitungen. Variablennamen heißen camelCase (also starten sie nie UpperCase). Es ist auch eine schlechte Idee, etwas wie "Sammlung" in einen Variablennamen zu schreiben. Warum nicht "transactionsByIndex" oder so ?! – GhostCat
Und darüber nachdenken: Es klingt wirklich seltsam, dass Ihr Kartenschlüssel ein Integer sein soll? Wahrscheinlich solltest du einen Schritt zurückgehen und versuchen, ** mehr Abstraktionen einzuführen. Zum Beispiel: Eine Klasse, die eine ** Transaktion darstellt **. Diese Klasse kennt die 5 Attribute; und hat Methoden, um zum Beispiel zwei Transaktionen zu vergleichen. Also: weg von Low-Level-2-dim-String-Arrays. Sonst verbringst du viel Zeit mit dem Schreiben von sehr viel Array-Manipulations-Code auf niedriger Ebene. Sobald der Editor geschlossen wird, wird dies zu einem Albtraum. – GhostCat