Java按字母顺序排列阵列列表,并对其他数组进行相同的更改



我有四个arraylists。我想按字母顺序排序其中一个,而案件被忽略,并在其他三个阵列列表中进行相同的更改。

 ArrayList<String> arrPackage = new ArrayList<>();
 ArrayList<String> arrPackageDates = new ArrayList<>();
 ArrayList<String> arrPackageDuration = new ArrayList<>();
 ArrayList<String> arrPackageFileSize = new ArrayList<>();
 // Code to add data to ArrayLists (data is not coming from sqlite database)
 ...
 // Code to sort arrPackage alphabatically with case ignored
  Collections.sort(arrPackage, new Comparator<String>() {
                        @Override
                        public int compare(String s1, String s2) {
                            return s1.compareToIgnoreCase(s2);
                        }
                    });

但是我怎么知道哪些索引已更改?

一种方法是创建一个包装对象Package,其中包含四种类型的元数据,该元数据出现在四个当前列表中。这样的东西:

public class Package {
    private String name;
    private String date;
    private String duration;
    private String fileSize;
    public Package() {
        // can include other constructors as well
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // other getters and setters
}

然后使用在Package对象上使用的自定义比较器进行排序:

List<Package> packages = new ArrayList<>();
Collections.sort(packages, new Comparator<Package>() {
    @Override
    public int compare(Package p1, Package p2) {
        String name1 = p1.getName();
        String name2 = p2.getName();
        return name1.compareToIgnoreCase(name2);
    }
});

作为一般免责声明,上述操作很可能必须在数据库中更有效。因此,如果您的数据最终来自数据库,则应尝试在此处进行如此繁重的举重。

一种简单的简单方法是备份您的ArrayList

ArrayList<String> backupPackage = arrPackage;

,然后使用您的代码对数组进行排序。然后使用for循环比较两个阵列。

for (int i = 0; i < backupArray.size(); i++) {
    if (!aar.get(i).equals(aar.get(i))) { // then the item has been changed
        // ... YOUR CODE
        // at this point you know which indexes have been changed and can modify your other arrays in any way you need
    }
}

我使用了这种方法:

                    ArrayList<String> backupPackage = new ArrayList<>();
                    ArrayList<String> backupPackageDates = new ArrayList<>();
                    ArrayList<String> backupPackageDuration = new ArrayList<>();
                    ArrayList<String> backupPackageFileSize = new ArrayList<>();
                    for(int j=0;j<arrPackage.size();j++) {
                        backupPackage.add(arrPackage.get(j));
                    }
                    for(int j=0;j<arrPackageDates.size();j++) {
                        backupPackageDates.add(arrPackageDates.get(j));
                    }
                    for(int j=0;j<arrPackageDuration.size();j++) {
                        backupPackageDuration.add(arrPackageDuration.get(j));
                    }
                    for(int j=0;j<arrPackageFileSize.size();j++) {
                        backupPackageFileSize.add(arrPackageFileSize.get(j));
                    }
                    Collections.sort(arrPackage, new Comparator<String>() {
                        @Override
                        public int compare(String s1, String s2) {
                            return s1.compareToIgnoreCase(s2);
                        }
                    });
                    int newindex;
                    for(int i=0; i<backupPackage.size(); i++) {
                        newindex = backupPackage.indexOf(arrPackage.get(i));
                        if(newindex != i) {
                            arrPackageDates.set(i, backupPackageDates.get(newindex));
                            arrPackageDuration.set(i, backupPackageDuration.get(newindex));
                            arrPackageFileSize.set(i, backupPackageFileSize.get(newindex));
                        }
                    }
                    backupPackage.clear();                    
                    backupPackageDuration.clear();     
                    backupPackageDuration.clear();
                    backupPackageFileSize.clear();

最新更新