分割下面用" /"分隔的字符串后,在每个字符串中,第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值并保持插入顺序。 拆分斜线分离后的字符串请告知如何存储。 谢谢。
答案 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}]}