1. Java / Говнокод #8266

    +78

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    /*
             * Для операций UPDATE идентификаторы объектов должны быть уникальными.
             */
            HashMap<Long,Boolean> filterUniqueChangeObjects = new HashMap<Long, Boolean>();
            for (RepositoryObject repositoryObject : resultRepositiry) {
    			if(repositoryObject.getOperationType()  == OperationType.UPDATE) {
    				if(filterUniqueChangeObjects.containsKey(repositoryObject.getObjectId())) {
    					log.warn("Объект с идентификатором уже присутствует в обработке UPDATE " + repositoryObject.getObjectId());
    				} else {
    					resultUniqueRepositiry.add(repositoryObject);
    					filterUniqueChangeObjects.put(repositoryObject.getObjectId(), true);
    				}
    			}
    		}

    Запостил: al_open, 21 Октября 2011

    Комментарии (8) RSS

    • Стрельба из пушки по воробьям
      Ответить
      • Что из этого пушка? HashMap?
        Ответить
        • >пушка
          [Я хотел было петросянски пошутить про бетменов,
          но модератор не пропустил быдлофорс]
          Ответить
    • слишком мало данных
      Ответить
    • А ничего что для контроля уникальности мы используем Map<Long, Boolean> вместо обычного множества?
      Ответить
      • 1. Используется ли дальше как-нибудь по коду filterUniqueChangeObjects или нет?
        Если используется, то лежащий Boolean трактуется как true/false или как true/false/null?
        Если не используется или используется в значении true/false, можно заменить filterUniqueChangeObjects на Set.

        2. resultUniqueRepositiry - List или Set?
        Если Set и у RepositoryObject.equals реализован через objectId то вообще можно отказаться от filterUniqueChangeObjects.
        Если же List, то тут значимым фактором может являться размер этого самого списка. При больших его размерах использование использование кода вида
        if (!resultUniqueRepositiry.contains(repositoryObject)) {
            resultUniqueRepositiry.add(repositoryObject);
        }

        может вносить большой оверхед.
        Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий