Java 如何使用对象键在两个贴图之间建立关系
我有两张地图:Java 如何使用对象键在两个贴图之间建立关系,java,hashmap,Java,Hashmap,我有两张地图: Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap = new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>(); Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
我需要在两个映射之间创建一个关系,其中另一个映射中的KeyMapMediciones.canal
=KeyMapMediciones.aplicacion
对于每个
aplicacion
我都需要得到ncanal
我想猜你在找什么。我做了这样的假设:
- 在
中,您始终拥有medicionesMap
和canal!=空
aplicacion==null
- 在
中,您始终拥有medicinesaplicacionmap
和canal==null
aplicacion!=空
和canal
application
/** superclass for medicions */
abstract class Medicion {
public int tipoTransaccion;
public ResultadoConsultaNegocioStandard standard;
}
/** those medicions with canals, referencing medicions with aplicacions */
class MedicionCanal extends Medicion {
public String canal;
public MedicionAplicacion medicionAplicacion;
}
/** those medicions with aplicacions */
class MedicionAplicacion extends Medicion {
public String aplicacion;
}
您可以使用现有数据轻松填充这些新类:
import java.util.*;
import java.util.Map.Entry;
/** old structure */
class KeyMapMediciones {
public int tipoTransaccion;
public String canal;
public String aplicacion;
}
class Snippet {
public static void main(String[] args) {
Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
// create map of aplicacion to Medicion by second map
Map<String, MedicionAplicacion> aplicacions = new HashMap<>();
for (Entry<KeyMapMediciones, ResultadoConsultaNegocioStandard> entry : medicionesAplicacionMap.entrySet()) {
KeyMapMediciones key = entry.getKey();
ResultadoConsultaNegocioStandard value = entry.getValue();
// copy data from old structure into new Medicion
MedicionAplicacion medicionAplicacion = new MedicionAplicacion();
medicionAplicacion.tipoTransaccion = key.tipoTransaccion;
medicionAplicacion.aplicacion = key.aplicacion;
medicionAplicacion.standard = value;
aplicacions.put(medicionAplicacion.aplicacion, medicionAplicacion);
}
// create map of canal to Medicion by second map
Map<String, MedicionCanal> canals = new HashMap<>();
for (Entry<KeyMapMediciones,ResultadoConsultaNegocioStandard> entry : medicionesMap.entrySet()) {
KeyMapMediciones key = entry.getKey();
ResultadoConsultaNegocioStandard value = entry.getValue();
// copy data from old structure into new Medicion
MedicionCanal medicionCanal = new MedicionCanal();
medicionCanal.tipoTransaccion = key.tipoTransaccion;
medicionCanal.canal = key.canal;
medicionCanal.standard = value;
// link to aplication
medicionCanal.medicionAplicacion = aplicacions.get(key.canal);
canals.put(medicionCanal.canal, medicionCanal);
}
}
}
结果没有得到你想要的。所有
aplicacion
等于canal
的keymapmedicione
列表?第一个映射的键是否始终具有aplicacion==null
,第二个映射的键是否始终具有canal==null
?
import java.util.*;
import java.util.Map.Entry;
/** old structure */
class KeyMapMediciones {
public int tipoTransaccion;
public String canal;
public String aplicacion;
}
class Snippet {
public static void main(String[] args) {
Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
// create map of aplicacion to Medicion by second map
Map<String, MedicionAplicacion> aplicacions = new HashMap<>();
for (Entry<KeyMapMediciones, ResultadoConsultaNegocioStandard> entry : medicionesAplicacionMap.entrySet()) {
KeyMapMediciones key = entry.getKey();
ResultadoConsultaNegocioStandard value = entry.getValue();
// copy data from old structure into new Medicion
MedicionAplicacion medicionAplicacion = new MedicionAplicacion();
medicionAplicacion.tipoTransaccion = key.tipoTransaccion;
medicionAplicacion.aplicacion = key.aplicacion;
medicionAplicacion.standard = value;
aplicacions.put(medicionAplicacion.aplicacion, medicionAplicacion);
}
// create map of canal to Medicion by second map
Map<String, MedicionCanal> canals = new HashMap<>();
for (Entry<KeyMapMediciones,ResultadoConsultaNegocioStandard> entry : medicionesMap.entrySet()) {
KeyMapMediciones key = entry.getKey();
ResultadoConsultaNegocioStandard value = entry.getValue();
// copy data from old structure into new Medicion
MedicionCanal medicionCanal = new MedicionCanal();
medicionCanal.tipoTransaccion = key.tipoTransaccion;
medicionCanal.canal = key.canal;
medicionCanal.standard = value;
// link to aplication
medicionCanal.medicionAplicacion = aplicacions.get(key.canal);
canals.put(medicionCanal.canal, medicionCanal);
}
}
}
// find out the aplication of the medicion with canal == "canalA"
String aplicacionOfCanalA = canals.get("canalA").medicionAplicacion.aplicacion;