如何使用Object键在两个映射之间建立关系

时间:2015-07-24 13:38:27

标签: java hashmap

我有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

1 个答案:

答案 0 :(得分:0)

我试图猜测你在寻找什么。我做出了这样的假设:

  • 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;