Pour utiliser une clé composite dans Java Map, spécifiez une classe qui contient tous les champs que vous souhaitez utiliser dans la clé composite de la clé Map. À ce stade, remplacez la méthode suivante de la classe utilisée pour la clé.
Considérez la classe suivante qui contient des ventes et gérez cette classe avec une carte qui utilise une clé composite.
Classe de clé composite
package hoge;
import java.time.LocalDate;
/**Clé composite*/
public class CompositeKey {
/**Numéro de magasin*/
private final Integer shopNo;
/**Date de vente*/
private final LocalDate salesDate;
public CompositeKey(Integer storeNo, LocalDate salesDate) {
this.shopNo = storeNo;
this.salesDate = salesDate;
}
}
Puisque les méthodes equals et hashCode sont définies dans la classe Object, qui est la source d'héritage de toutes les classes, cette opération remplacera les méthodes de la classe Object.
Classe de clé composite
package hoge;
import java.time.LocalDate;
/**Clé composite*/
package hoge;
import java.time.LocalDate;
/**Clé composite*/
public class CompositeKey {
/**Numéro de magasin*/
private final Integer shopNo;
/**Date de vente*/
private final LocalDate salesDate;
public CompositeKey(Integer storeNo, LocalDate salesDate) {
this.shopNo = storeNo;
this.salesDate = salesDate;
}
/* (Non-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;
}
/* (Non-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;
}
}
Stockez les données de vente dans HashMap et obtenez la valeur avec la clé composée.
Numéro de magasin | Date de vente | Montant des ventes |
---|---|---|
1 | 2017/01/01 | 100 |
2 | 2017/01/02 | 200 |
3 | 2017/01/03 | 300 |
Classe de vente
package hoge;
import java.time.LocalDate;
/**Record de ventes*/
public class SalesRecord {
/**Numéro de magasin*/
private final Integer shopNo;
/**Date de vente*/
private final LocalDate salesDate;
/**Montant des ventes*/
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;
}
/**pour le test*/
@Override
public String toString() {
return "SalesRecord [storeNo=" + shopNo + ", salesDate=" + salesDate + ", sales=" + sales + "]";
}
}
Classe principale
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) {
//données de test
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));
//Générer HashMap
Map<CompositeKey,SalesRecord> map = new HashMap<>();
for (SalesRecord record : salesRecords) {
map.put(new CompositeKey(record.getStoreNo(), record.getSalesDate()), record);
}
//Confirmez que la valeur peut être extraite de la clé.
System.out.println(map.get(new CompositeKey(2,LocalDate.of(2017,1,2))));
}
}
Essayez d'obtenir un enregistrement à partir des données sur le montant des ventes stockées dans HashMap avec la clé composite suivante.
Numéro de magasin | Date de vente |
---|---|
2 | 2017/01/02 |
console
SalesRecord [storeNo=2, salesDate=2017-01-02, sales=200]
Il a été confirmé que l'enregistrement spécifié pouvait être récupéré.
・ GitHub Utiliser la clé composée dans Java Map
Le code créé pour les tests est stocké ci-dessus. Cependant, puisque le code publié inclut la classe Main, il peut également être exécuté par copier-coller.
Recommended Posts