如何将LinkedHashMap的arraylist存储为java中LinkedHashMap的值

时间:2018-03-23 07:41:18

标签: java collections linkedhashmap

分割下面用" /"分隔的字符串后,在每个字符串中,第1个4字符是地图的键,休息是值,例如在" GOMN1Q"中,GOMN是键和1Q是值,同样在" SNIF4A25E8"中,SNIF是键,4A25E8是值。

/GOMN1Q/SNIF4A25E8/BOOKTQNN013A/RATE109.00/ROOMMSG1/RD1MSG11/RD2MSG12/CMUY/SMKN/BOOKTQNNN5GM/RATE114.00/ROOMMSG2/RD1MSG21/RD2MSG22/CMUY/CMUY/SMKN/BOOKTQNNB1KQ/RATE119.00/ROOMMSG3/RD1MSG31/RD2MSG32/CMUY/CMUY/SMKN

以下形式,每个

[GOMN:1Q
SNIF:4A25E8
k3: [BOOK:TQNN013A RATE:109.00 k4:[MSG1, MSG11, MSG12] CMUY:11 SMOK:N]
    [BOOK:TQNNN5GM RATE:114.00 k4:[MSG2, MSG21, MSG22] CMUY:22 SMOK:N]
    [BOOK:TQNNB1KQ RATE:119.00 k4:[MSG3, MSG31, MSG32] CMUY:33 SMOK:N]]

我使用map作为LinkedHashMap,因为LinkedHashMap允许Null值并保持插入顺序。 拆分斜线分离后的字符串请告知如何存储。 谢谢。

1 个答案:

答案 0 :(得分:0)

实际上,将数据存储为带有列表的地图并不是最佳选择 - 在大多数情况下,最好创建自己的代表实际业务模型的域类。

然而,如果您真的想以这种方式存储数据,那么您可以这样做。

这是一个简单的示例,说明如何使用地图和列表重新创建问题中给出的示例,而无需创建表示业务模型对象的类:

public static void main(String[] args) throws IOException {
    Map<String, Object> map = new LinkedHashMap<>();
    map.put("GOMN", 10);
    map.put("SNIF", "4A25E8");
    List<Map<String, Object>> k3List = new ArrayList<>();
    createK3Map(k3List, "TQNN013A", 109.00, Arrays.asList("MSG1", "MSG11", "MSG12"), 11, "N");
    createK3Map(k3List, "TQNNN5GM", 114.00, Arrays.asList("MSG2", "MSG21", "MSG22"), 22, "N");
    map.put("k3", k3List);
    System.out.println(map);
}

private static void createK3Map(List<Map<String, Object>> k3List, String book, double rate, List<String> messages, int cmuy, String smok) {
    Map<String, Object> k3_1 = new LinkedHashMap<>();
    k3_1.put("BOOK", book);
    k3_1.put("RATE", rate);
    k3_1.put("k4", messages);
    k3_1.put("CMUY", cmuy);
    k3_1.put("SMOK", smok);
    k3List.add(k3_1);
}

打印出来:

{GOMN=10, SNIF=4A25E8, k3=[{BOOK=TQNN013A, RATE=109.0, k4=[MSG1, MSG11, MSG12], CMUY=11, SMOK=N}, {BOOK=TQNNN5GM, RATE=114.0, k4=[MSG2, MSG21, MSG22], CMUY=22, SMOK=N}]}