как обойти ArrayList.contains использовать == - PullRequest
0 голосов
/ 16 декабря 2011

Возникла проблема, когда базовая реализация .equals() рассматривает 2 Map s как одно и то же из-за их пар «ключ-значение», а не из-за их ref.Хотя я знаю, что это правильная процедура, я все же хотел бы добавить их к другому ArrayList в соответствии с уникальной ссылкой.

String[] sortedStringOfDatesFromTempMaps = new String[dates.length];

List<Map<String, String>> tempTradeMap;

 for (int i = 0; i < sortedStringOfDatesFromTempMaps.length; i++) {
        String[] stringSplitArr = new String[2];
        stringSplitArr = sortedStringOfDatesFromTempMaps[i].split("=");

        for (int j = 0; j < tempTradeMap.size(); j++) {
            if (tempTradeMap.get(j).containsValue(stringSplitArr[0])
                    && tempTradeMap.get(j).containsValue(stringSplitArr[1])){

               if(!sortedMapList.contains(tempTradeMap.get(j))){
                    sortedMapList.add(tempTradeMap.get(j));
                }

                break;
            }
        }
    }

Проблема, с которой я столкнулся, заключается в том, что sortedMapList должен иметь тот же номерэлементов, которые передаются, в первую очередь.Тем не менее, так как параметр «содержит» относится к ним одинаково, они добавляют только один.Таким образом, если имеется 5 элементов с 2 дублирующимися парами, окончательный список будет содержать только 3 элемента.

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Вы можете создать дочерний класс используемой реализации Map и переопределить equals() и hashCode()

0 голосов
/ 19 декабря 2011

Вы можете создать потомка того типа Map, который вы используете, который переопределяет equals и hashcode, но это излишне для того, что вы хотите.

Вместо этого напишите метод для проведения необходимого теста, например:

boolean containsExactly(Collection c,Object o) {...

В нем вы перебираете элементы коллекции и проверяете, совпадают ли они с тем, что вы хотите добавить, используя ==.

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