Сравните элементы 2d Array друг с другом и сохраните это на карте с кортежем - PullRequest
2 голосов
/ 04 апреля 2020

У меня есть это 2d-Array

[[1, path1, path2, path3, path5], [0, path1, path3, path5], [1, path1, path2, path5]]

Я хочу сохранить его элемент в Map, как это Map<String, Pair<Integer, Integer>> information;

Первое целое число путь счетчика с 1 и целое число se c - это путь счетчика с 0

, поэтому ожидаемый результат выглядит следующим образом.

path1->(2,1) // because the path1 is 2 times appeared with in the 2d-Array with 1 and 1 times with 0. path2->(2,0) path3->(1,1) path5->(2,1)

Это моя попытка, я остановился, потому что не знал, как сравнивать элементы и сохранять их элементы в Map. импорт java .util. *;

public class HelloWorld {

    public static void main(String[] args) {
        List < List < String >> all = new ArrayList < > ();
        List < String > arr1 = new ArrayList < > ();
        arr1.add("1");
        arr1.add("path1");
        arr1.add("path2");
        arr1.add("path3");
        arr1.add("path5");
        ////////

        List < String > arr2 = new ArrayList < > ();
        arr2.add("0");
        arr2.add("path1");
        arr2.add("path3");
        arr2.add("path5");
        ////////

        List < String > arr3 = new ArrayList < > ();
        arr3.add("1");
        arr3.add("path1");
        arr3.add("path2");
        arr3.add("path5");
        ////////
        all.add(arr1);
        all.add(arr2);
        all.add(arr3);

        Map < String, Pair < Integer, Integer >> information;

        System.out.println(all);

        for (int i = 0; i < all.size(); i++) {
            for (int j = 0; j < all.get(i).size(); j++) {
                System.out.println(all.get(i).get(j));

            }

        }

    }





    public class Pair < L, R > {

        private final L left;
        private final R right;

        public Pair(L left, R right) {
            assert left != null;
            assert right != null;

            this.left = left;
            this.right = right;
        }

        public L getLeft() {
            return left;
        }
        public R getRight() {
            return right;
        }

        @Override
        public int hashCode() {
            return left.hashCode() ^ right.hashCode();
        }

        @Override
        public boolean equals(Object o) {
            if (!(o instanceof Pair)) return false;
            Pair pairo = (Pair) o;
            return this.left.equals(pairo.getLeft()) &&
                this.right.equals(pairo.getRight());
        }

    }

}

1 Ответ

1 голос
/ 05 апреля 2020

Поскольку арифметические операции c недопустимы для обобщенных типов, мы должны привести это обобщенное значение c к целому числу (только если вы уверены, что значение является целым числом), иначе вместо обобщенных элементов вы можете использовать примитивные типы данных. , Поскольку вы написали дженерики, я использовал дженерики для реализации. В противном случае я бы рекомендовал использовать примитивные типы данных для ваших требований. Следующий код будет делать то, что вы просили:


    public class HelloWorld {

        public static void main(String[] args) {


            String[] inputArray[] = {{"1", "path1", "path2", "path3", "path5"}, {"0", "path1", "path3", "path5"}, {"1", "path1", "path2", "path5"}};
            HashMap<String, Tuple> map = new HashMap<String, Tuple>();
            for (int i = 0; i < inputArray.length; i++) {
                String[] individualArray = inputArray[i];

                for (int j = 0; j < individualArray.length; j++) {
                    //int[] tuple = new int[2];
                    Tuple tuple;
                    if(map.containsKey(individualArray[j]))
                    {
                        tuple = map.get(individualArray[j]);

                        if(individualArray[0].equals("1"))
                        {
                            int counter = (int)tuple.getLeft();
                            counter = counter+1;
                            tuple.setLeft(counter);
                            //tuple[0]++;
                        }
                        else
                        {
                            int counter = (int)tuple.getRight();
                            counter = counter+1;
                            tuple.setRight(counter);
                            //tuple[1]++;
                        }
                        map.put(individualArray[j], tuple);

                    }
                    else
                    {
                        if(individualArray[0].equals("1"))
                        {
                            tuple = new Tuple(1,0);
                        /*
                         * tuple[0] = 1; tuple[1] = 0;
                         */
                        }
                        else
                        {
                            tuple = new Tuple(0,1);
                        /*
                         * tuple[0] = 0; tuple[1] = 1;
                         */
                        }


                        map.put(individualArray[j], tuple);
                    }

                }




                }

                //System.out.println( map.get("path5").getLeft() +" , "+ map.get("path5").getRight());



        }


public class Tuple<L,R> {

    private L left;
    private R right;

    public Tuple() {
        this.left = null;
        this.right = null;
    }

    public L getLeft() {
        return left;
    }

    public void setLeft(L left) {
        this.left = left;
    }

    public R getRight() {
        return right;
    }

    public void setRight(R right) {
        this.right = right;
    }

    public Tuple(L left, R right) {
        this.left = left;
        this.right = right;
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...