Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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中将下面的Map数据结构转换为另一个数据结构_Java - Fatal编程技术网

在java中将下面的Map数据结构转换为另一个数据结构

在java中将下面的Map数据结构转换为另一个数据结构,java,Java,我主要尝试创建以下数据结构: Map<String, Map<String, List<String>>> 所以我基本上已经尝试过了,但是请告诉我,有没有其他方法或数据结构可以让我通过链表或树来实现下面相同的功能请告诉我 Map<String, Map<String, List<String>>> ultimateMap = new HashMap<String,Map<String, List<St

我主要尝试创建以下数据结构:

  Map<String, Map<String, List<String>>>
所以我基本上已经尝试过了,但是请告诉我,有没有其他方法或数据结构可以让我通过链表或树来实现下面相同的功能请告诉我

Map<String, Map<String, List<String>>> ultimateMap = new HashMap<String,Map<String, List<String>>> ();

    Map<String, List<String>> map1 = new HashMap<String, List<String>>();
    map1.put ("payerName", Arrays.asList("wpn", "wpfnb", "dgeft", "xbthy"));
    map1.put ("fixedRate", Arrays.asList("dd", "ww", "trrty", "httyure"));

    Map<String, List<String>> map2 = new HashMap<String, List<String>>();
    map2.put ("payerName", Arrays.asList("SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy"));
    map2.put ("fixedRate", Arrays.asList("WWdd", "wTTYw", "YYYYtrrty", "IIIhttyure"));

    ultimateMap.put("B1", map1);
    ultimateMap.put("B2", map2);
Map<String, Map<String, List<String>>> ultimateMap = new HashMap<String,Map<String, List<String>>> ();
Map ultimateMap=newhashmap();
Map map1=新的HashMap();
map1.put(“payerName”,Arrays.asList(“wpn”,“wpfnb”,“dgeft”,“xbthy”);
map1.put(“fixedRate”,Arrays.asList(“dd”,“ww”,“trrty”,“httyure”);
Map map2=新的HashMap();
map2.put(“payerName”,Arrays.asList(“SSSwpn”,“wpfssnb”,“GGGdgeft”,“xbtyyyyyy”);
map2.put(“fixedRate”,Arrays.asList(“WWdd”,“wTTYw”,“YYYYtrrty”,“IIIhttyure”);
最终地图放置(“B1”,地图1);
最终地图放置(“B2”,地图2);
建议我是否有任何其他方式或数据结构可以通过链表或树实现以下相同功能请建议

Map ultimateMap=new HashMap();
Map<String, Map<String, List<String>>> ultimateMap = new HashMap<String,Map<String, List<String>>> ();

    Map<String, List<String>> map1 = new HashMap<String, List<String>>();
    map1.put ("payerName", Arrays.asList("wpn", "wpfnb", "dgeft", "xbthy"));
    map1.put ("fixedRate", Arrays.asList("dd", "ww", "trrty", "httyure"));

    Map<String, List<String>> map2 = new HashMap<String, List<String>>();
    map2.put ("payerName", Arrays.asList("SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy"));
    map2.put ("fixedRate", Arrays.asList("WWdd", "wTTYw", "YYYYtrrty", "IIIhttyure"));

    ultimateMap.put("B1", map1);
    ultimateMap.put("B2", map2);
Map<String, Map<String, List<String>>> ultimateMap = new HashMap<String,Map<String, List<String>>> ();

是实现终极地图的好方法。我认为没有更好的方法了。

我根据您的问题创建了两个数据结构。希望这对您的想法有所帮助

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


public class TestClass {

public static void main(String[] args) {
    new TestClass().LoadData();
}

private void LoadData() {

    //1 Assuming payerName List and fixedRate list are of different sizes
    Map<String, PayerDataModel1> detailMap = new HashMap<>();
    PayerDataModel1 p1 = new PayerDataModel1();
    p1.payerName.add("p1");
    p1.fixedRate.add("f1");
    p1.payerName.add("p2");
    p1.fixedRate.add("f2");
    p1.payerName.add("p3");
    p1.fixedRate.add("f3");
    p1.payerName.add("p4");
    p1.fixedRate.add("f4");

    detailMap.put("B1", p1);

    p1 = new PayerDataModel1();
    p1.payerName.add("pp1");
    p1.fixedRate.add("ff1");
    p1.payerName.add("pp2");
    p1.fixedRate.add("ff2");
    p1.payerName.add("pp3");
    p1.fixedRate.add("ff3");
    p1.payerName.add("pp4");
    p1.fixedRate.add("ff4");

    detailMap.put("B2", p1);

    System.out.println(detailMap.get("B1").fixedRate.get(0));
    System.out.println(detailMap.get("B1").payerName.get(0));

    System.out.println(detailMap);
    //2 Assuming each payerName has a fixedRate [so list are of same sizes]
    Map<String, PayerDataModel2> detailMap2 = new HashMap<>();
    PayerDataModel2 payerdata = new PayerDataModel2();
    payerdata.addNew("p1", "f1");
    payerdata.addNew("p2", "f2");
    payerdata.addNew("p3", "f3");

    detailMap2.put("B1", payerdata);

    payerdata = new PayerDataModel2();
    payerdata.addNew("pp1", "ff1");
    payerdata.addNew("pp2", "ff2");
    payerdata.addNew("pp3", "ff3");
    detailMap2.put("B2", payerdata);

    System.out.println(detailMap2.get("B1").payerDataList.get(0).payerName);

    System.out.println(detailMap2);
}
}

class PayerDataModel1 {

ArrayList<String> payerName = new ArrayList<>();
ArrayList<String> fixedRate = new ArrayList<>();

@Override
public String toString() {
    return "payerName - " + payerName + " fixedRate - " + fixedRate;
}
 }

 class PayerDataModel2 {

ArrayList<PayerDataModelDetail> payerDataList = new ArrayList<>();

public void addNew(String payerName, String fixedRate) {
    PayerDataModelDetail p = new PayerDataModelDetail();
    p.fixedRate = fixedRate;
    p.payerName = payerName;
    payerDataList.add(p);
}

@Override
public String toString() {
    return payerDataList.toString();
}
 }

class PayerDataModelDetail {

String payerName;
String fixedRate;

@Override
public String toString() {
    return "payerName - " + payerName + " fixedRate - " + fixedRate;
}

}
第二个模型的输出

{B2=[payerName - pp1 fixedRate - ff1, payerName - pp2 fixedRate - ff2, payerName - pp3 fixedRate - ff3], B1=[payerName - p1 fixedRate - f1, payerName - p2 fixedRate - f2, payerName - p3 fixedRate - f3]}

看起来您只需要一个从
字符串映射到
列表的映射。如果不想将名称与每个映射关联,只需将它们封装在包装器类中

我将创建一个
CustomMap
类,该类包含
String mapName
Map payerAndRateMap

class CustomMap
{
    private String mapName;
    private Map<String, List<String>> payerAndRateMap;

    CustomMap(String mapName, Map<String, List<String>> payerAndRateMap)
    {
        this.mapName = mapName;
        this.payerAndRateMap = payerAndRateMap;  
    }

    public String getMapName()
    {
        return mapName;
    }

    public Map<String, List<String>> getPayerAndRateMap()
    {
        return payerAndRateMap;
    }
}
这样,您的客户端代码的可读性更好,例如:

customMap1.getPayerAndRateMap().get("payerName");
对读者来说,这比说:

ultimateMap.get("B1").get("xyz");

我不认为你的实现很糟糕…@LuiggiMendoza这感觉有点太像示例代码了,我建议将其发布到CR上。你能纠正上面的名为CustomMap的pojo吗?我正在使用jdk 1.5,其余的方法是非常酷的payerName和RateMap.put(“payerName”,Arrays.asList(“wpn”,“wpfnb”,“dgeft”,“xbthy”);payerRateMap.put(“fixedRate”,Arrays.asList(“dd”,“ww”,“trrty”,“httyure”));我在上面的put行中遇到编译器错误,请建议如何避免put中的编译错误lines@sdsdfdfdg,你能告诉我编译器到底在说什么吗?在我看来这很好,参考代码示例。这与put方法签名不匹配有关,因为put方法在其中使用数组列表
ultimateMap.get("B1").get("xyz");