我有两个数组数组1和array2.I希望将数组1数据用作键,将数组2数据用作哈希映射中的值
int[] array1 = { 1, 2, 3, 4, 5 };
String[][] array2 = { { "open", "1", "2", "7" }, { "3", "3", "4", "r" } ,{ "close", "3", "4", "ff" },{ "open", "3", "4", "close" },{ "55", "3", "4", "f" },{ "close", "3", "4", "rr" }};
最终输出hashmap应为
1-{ "open", "1", "2", "7" }, { "3", "3", "4", "r" } ,{ "close", "3", "4", "ff" }
2-{ "open", "3", "4", "close" },{ "55", "3", "4", "f" },{ "close", "3", "4", "rr" }
这里的条件是它将覆盖从阵列2打开到关闭的所有数据。谢谢
[编辑] 这是我尝试过的。
for (int firstArray = 0; firstArray < array2.length; firstArray++) {
String[] temp2DRow = array2[firstArray];
List < String > list = new ArrayList < > ();
if (temp2DRow[0].contains("open")) {
for (String str: temp2DRow) {
list.add(str);
}
}
map.put(array1[firstArray], list);
System.out.println(map);
}
答案 0 :(得分:2)
你可以尝试类似的东西,
public static void main(String[] args) {
int[] array1 = { 1, 2, 3, 4, 5 };
String[][] array2 = { { "open", "1", "2", "7" }, { "3", "3", "4", "r" } ,{ "close", "3", "4", "ff" },{ "open", "3", "4", "close" },{ "55", "3", "4", "f" },{ "close", "3", "4", "rr" }};
HashMap<Integer, List<String>> hm= new HashMap<Integer, List<String>>();
for(int i=0;i<array1.length;i++){
List<String> list = new ArrayList<String>();
for(String str : array2[i]){
list.add(str);
}
hm.put(i, list);
}
for(Integer intKey : hm.keySet()){
System.out.println(intKey + " : " + hm.get(intKey));
}
}
注意:阵列1&amp;的长度array2必须相同才能实现上述解决方案。在你的情况下,array1&amp; array2长度不一样。
已编辑:
我猜你现在想要的是什么......
public static void main(String[] args) {
int[] array1 = { 1, 2, 3, 4, 5 };
String[][] array2 = { { "open", "1", "2", "7" }, { "3", "3", "4", "r" } ,{ "close", "3", "4", "ff" },{ "open", "3", "4", "close" },{ "55", "3", "4", "f" },{ "close", "3", "4", "rr" }};
HashMap<Integer, List<List<String>>> hm= new HashMap<Integer, List<List<String>>>();
int savePoint = 0;
boolean flag = false;
for(int i=0;i<array1.length;i++){
List<List<String>> listSet = new ArrayList<List<String>>();
for(int j = savePoint ; j < array2.length ; j++){
List<String> list = new ArrayList<String>();
savePoint++;
for(String str : array2[j]){
list.add(str);
}
flag = true;
listSet.add(list);
if(list.get(0).contains("close")){
break;
}
}
if(flag){
hm.put(array1[i], listSet);
flag= false;
}
}
for(Integer intKey : hm.keySet()){
System.out.println(intKey + " : " + hm.get(intKey));
}
}
答案 1 :(得分:0)
您可以像array1
和array2
一样使用相同的长度来实现:
int[] array1 = {1, 2, 3, 4,5,6};
String[][] array2 = {{"open", "1", "2", "7"}, {"3", "3", "4", "r"},
{"close", "3", "4", "ff"}, {"open", "3", "4", "close"},
{"55", "3", "4", "f"}, {"close", "3", "4", "rr"}};
Map<Integer, String[]> map = new HashMap<>();
for (int i = 0; i < array2.length; i++) {
String[] ar2 = array2[i];
map.put(array1[i], ar2);
}
// you can check by iterating the map
/*for (Map.Entry<Integer, String[]> entrySet : map.entrySet()) {
k++;
Integer key = entrySet.getKey();
String[] value = entrySet.getValue();
System.out.print(key + " - { ");
for (int i = 0; i < value.length; i++) {
String value1 = value[i];
System.out.print(value.length-1==i?value1:value1 + ", ");
}
System.out.print(k==map.size()?" }":" },");
}*/