Um einen zusammengesetzten Schlüssel in Java Map zu verwenden, geben Sie eine Klasse an, die alle Felder enthält, die Sie im zusammengesetzten Schlüssel im Map-Schlüssel verwenden möchten. Überschreiben Sie zu diesem Zeitpunkt die folgende Methode der für den Schlüssel verwendeten Klasse.
Betrachten Sie die folgende Klasse, die Verkäufe enthält, und verwalten Sie diese Klasse mit einer Map, die einen zusammengesetzten Schlüssel verwendet.
Zusammengesetzte Schlüsselklasse
package hoge;
import java.time.LocalDate;
/**Zusammengesetzter Schlüssel*/
public class CompositeKey {
/**Shop-Nummer*/
private final Integer shopNo;
/**Verkaufsdatum*/
private final LocalDate salesDate;
public CompositeKey(Integer storeNo, LocalDate salesDate) {
this.shopNo = storeNo;
this.salesDate = salesDate;
}
}
Da die Methoden equals und hashCode in der Object-Klasse definiert sind, die die Vererbungsquelle aller Klassen darstellt, überschreibt diese Operation die Methoden der Object-Klasse.
Zusammengesetzte Schlüsselklasse
package hoge;
import java.time.LocalDate;
/**Zusammengesetzter Schlüssel*/
package hoge;
import java.time.LocalDate;
/**Zusammengesetzter Schlüssel*/
public class CompositeKey {
/**Shop-Nummer*/
private final Integer shopNo;
/**Verkaufsdatum*/
private final LocalDate salesDate;
public CompositeKey(Integer storeNo, LocalDate salesDate) {
this.shopNo = storeNo;
this.salesDate = salesDate;
}
/* (Nicht-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((salesDate == null) ? 0 : salesDate.hashCode());
result = prime * result + ((shopNo == null) ? 0 : shopNo.hashCode());
return result;
}
/* (Nicht-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CompositeKey other = (CompositeKey) obj;
if (salesDate == null) {
if (other.salesDate != null)
return false;
} else if (!salesDate.equals(other.salesDate))
return false;
if (shopNo == null) {
if (other.shopNo != null)
return false;
} else if (!shopNo.equals(other.shopNo))
return false;
return true;
}
}
Speichern Sie Verkaufsdaten in HashMap und erhalten Sie den Wert mit dem zusammengesetzten Schlüssel.
Shop-Nummer | Verkaufsdatum | Verkaufszahlen |
---|---|---|
1 | 2017/01/01 | 100 |
2 | 2017/01/02 | 200 |
3 | 2017/01/03 | 300 |
Verkaufsklasse
package hoge;
import java.time.LocalDate;
/**Verkaufsrekord*/
public class SalesRecord {
/**Shop-Nummer*/
private final Integer shopNo;
/**Verkaufsdatum*/
private final LocalDate salesDate;
/**Verkaufszahlen*/
private final Integer sales;
public SalesRecord(Integer storeNo, LocalDate salesDate, Integer sales) {
this.shopNo = storeNo;
this.salesDate = salesDate;
this.sales = sales;
}
public Integer getStoreNo() {
return shopNo;
}
public LocalDate getSalesDate() {
return salesDate;
}
public Integer getSales() {
return sales;
}
/**zum Test*/
@Override
public String toString() {
return "SalesRecord [storeNo=" + shopNo + ", salesDate=" + salesDate + ", sales=" + sales + "]";
}
}
Hauptklasse
package hoge;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestMain {
public static void main(String[] args) {
//Testdaten
List<SalesRecord> salesRecords = new ArrayList<>();
salesRecords.add(new SalesRecord(1,LocalDate.of(2017,1,1),100));
salesRecords.add(new SalesRecord(2,LocalDate.of(2017,1,2),200));
salesRecords.add(new SalesRecord(3,LocalDate.of(2017,1,3),300));
//Generieren Sie HashMap
Map<CompositeKey,SalesRecord> map = new HashMap<>();
for (SalesRecord record : salesRecords) {
map.put(new CompositeKey(record.getStoreNo(), record.getSalesDate()), record);
}
//Bestätigen Sie, dass der Wert vom Schlüssel abgerufen werden kann.
System.out.println(map.get(new CompositeKey(2,LocalDate.of(2017,1,2))));
}
}
Versuchen Sie, mit dem folgenden zusammengesetzten Schlüssel einen Datensatz aus den in HashMap gespeicherten Verkaufsmengen zu erhalten.
Shop-Nummer | Verkaufsdatum |
---|---|
2 | 2017/01/02 |
Konsole
SalesRecord [storeNo=2, salesDate=2017-01-02, sales=200]
Es wurde bestätigt, dass der angegebene Datensatz abgerufen werden konnte.
・ GitHub Verbundschlüssel in Java Map verwenden
Der zum Testen erstellte Code wird oben gespeichert. Da der veröffentlichte Code jedoch die Hauptklasse enthält, kann er auch durch Kopieren und Einfügen ausgeführt werden.
Recommended Posts