Как оптимизировать сравнение несортированных ArrayLists, которые содержат несортированные ArrayLists - PullRequest
1 голос
/ 24 апреля 2019

У меня есть два ArrayList объектов, где оба не отсортированы, но могут / должны иметь одинаковые значения, опять же, просто не отсортированные. В этих списках ArrayList нет уникальных идентификаторов. Каждый ArrayList содержит другой ArrayList, который является основой того, что мне нужно сравнивать, но этот ArrayList снова несортирован.

Для сравнения ArrayLists мне нужно использовать String для имени класса (можно повторить), String для его имени (можно повторить) и ArrayList действий, содержащихся в нем.

В настоящее время я создаю свои компараторы, сортирую исходные ArrayLists, затем сортирую внутренние ArrayLists, а затем перебираю список, сравнивая значения.

    ArrayList<PersistablePermission> oldPermissions = 
            new ArrayList<PersistablePermission>( oldRole.getPermissions() );

    ArrayList<PersistablePermission> newPermissions = 
            new ArrayList<PersistablePermission>( newRole.getPermissions() );

    if( oldPermissions.size() != newPermissions.size() ) {
        return true;
    }

    Comparator<PersistablePermission> comparePermissions = new 
    Comparator<PersistablePermission>() {
        public int compare( PersistablePermission p1, PersistablePermission p2 ) {
            return p1.compareTo( p2 );
        }
    };
    Comparator<PersistablePermission> comparePermissions = new Comparator<PersistablePermission>() {
        public int compare( PersistablePermission p1, PersistablePermission p2 ) {
            return p1.compareTo( p2 );
        }
    };

    Comparator<String> compareActions = new Comparator<String>() {
        public int compare(String s1, String s2) {
            return s1.compareTo( s2 );

        }
    };
    oldPermissions.sort( comparePermissions );
    newPermissions.sort( comparePermissions );

    for( int i = 0; i < oldPermissions.size(); i++ ) {
        oldPermissions.get( i ).getActionsList().sort( compareActions );
        newPermissions.get( i ).getActionsList().sort( compareActions );
    }

    for( int i = 0; i < oldPermissions.size(); i++ ) {
        PersistablePermission p1 = oldPermissions.get( i );
        PersistablePermission p2 = newPermissions.get( i );

        if ( ! ( p1.getClass().getName().equals( p2.getClass().getName() ) ) &&
                ( p1.getTargetName().equals( p2.getTargetName() ) ) &&
                ( p1.getActionsList().equals( p2.getActionsList() ) ) ) {
            return true;
        }
     }

     return false;

В настоящее время это работает, но я ищу помощь / советы по оптимизированному решению.

Я возвращаю истину, если есть разница между ними, ложь в противном случае.

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