如何使用对象键在两个地图之间建立关系
How to do a relation between two maps with a Object key
我有 2 张地图:
Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
bean KeyMapMediciones
有 3 个属性:
private int tipoTransaccion;
private String canal;
private String aplicacion;
我需要在两个地图之间创建关系,其中 KeyMapMediciones.canal
= KeyMapMediciones.aplicacion
在另一个地图中。
对于每个 aplicacion
我需要得到 n canal
.
我在猜你在找什么。我做了这个假设:
- 在
medicionesMap
你总是有 canal != null
和 aplicacion == null
- 在
medicionesAplicacionMap
你总是有 canal == null
和 aplicacion != null
canal
和 aplication
之间存在 1:1 关系
我建议重新考虑您的数据结构。我会建议这样的事情:
/** 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);
}
}
}
之后您可以使用这些对象引用来查询和重用您的数据:
// find out the aplication of the medicion with canal == "canalA"
String aplicacionOfCanalA = canals.get("canalA").medicionAplicacion.aplicacion;
我有 2 张地图:
Map<KeyMapMediciones,ResultadoConsultaNegocioStandard> medicionesMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
Map<KeyMapMediciones, ResultadoConsultaNegocioStandard> medicionesAplicacionMap =
new HashMap<KeyMapMediciones,ResultadoConsultaNegocioStandard>();
bean KeyMapMediciones
有 3 个属性:
private int tipoTransaccion;
private String canal;
private String aplicacion;
我需要在两个地图之间创建关系,其中 KeyMapMediciones.canal
= KeyMapMediciones.aplicacion
在另一个地图中。
对于每个 aplicacion
我需要得到 n canal
.
我在猜你在找什么。我做了这个假设:
- 在
medicionesMap
你总是有canal != null
和aplicacion == null
- 在
medicionesAplicacionMap
你总是有canal == null
和aplicacion != null
canal
和aplication
之间存在 1:1 关系
我建议重新考虑您的数据结构。我会建议这样的事情:
/** 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);
}
}
}
之后您可以使用这些对象引用来查询和重用您的数据:
// find out the aplication of the medicion with canal == "canalA"
String aplicacionOfCanalA = canals.get("canalA").medicionAplicacion.aplicacion;