我有两个对象的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。