如何使用对象键在两个地图之间建立关系

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 != nullaplicacion == null
  • medicionesAplicacionMap 你总是有 canal == nullaplicacion != null
  • canalaplication
  • 之间存在 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;