如何优化包含未排序ArrayList的未排序ArrayList的比较

时间:2019-04-24 13:31:45

标签: java sorting optimization comparison

我有两个对象的ArrayList,它们都是未排序的,但可以/应该具有相同的值,只是未排序。 这些ArrayList中没有唯一的标识符。 每个ArrayList都包含另一个ArrayList,这是我需要比较的内容,但是该ArrayList仍然是未排序的。

要比较ArrayList,我必须使用String作为其类名(可以重复),使用String作为其名称(可以重复)以及其中包含的动作ArrayList。

当前,我正在创建比较器,对原始ArrayList进行排序,然后对内部ArrayList进行排序,然后循环遍历比较值的列表。

    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;

目前这是可行的,但我正在寻求有关优化解决方案的帮助/建议。

如果两者之间有变化,我将返回true,否则返回false。

0 个答案:

没有答案