如何使用条件

时间:2015-11-24 06:38:47

标签: java arrays hashmap

我有两个数组数组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);
}

2 个答案:

答案 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)

您可以像array1array2一样使用相同的长度来实现:

    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()?" }":" },");

    }*/