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

时间:2017-05-05 04:06:50

标签: java android arraylist

我有四个ArrayLists。我想按字母顺序对其中一个进行排序,忽略大小写并在其他三个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);
                        }
                    });

但我如何知道哪些索引已更改?

3 个答案:

答案 0 :(得分:2)

一种方法是创建一个包装器对象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);
    }
});

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

答案 1 :(得分:0)

一种简单易用的方法是备份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
    }
}

答案 2 :(得分:0)

我使用了这种方法:

                    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();
相关问题