Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用对象键在两个贴图之间建立关系_Java_Hashmap - Fatal编程技术网

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
我都需要得到n
canal

我想猜你在找什么。我做了这样的假设:

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