基于另一个

时间:2018-02-02 15:20:20

标签: java android arrays sorting arraylist

我在课程中有ArrayList<String>()GlobalDataHolder.cardNameAndDescription),我希望按字母顺序排序,但我也希望排序 { {1}}(ArrayList<Integer>())在排序前面提到的UserBoxGlbImageAdapter.mGLBIcons

Sidenote :两个数组的大小均为3(0-2)。

我正在编写自己的自定义 compare()方法来执行此操作,但我没有实现我正在寻找的内容。当我点击运行排序代码的按钮时,正确的顺序除非我单击按钮3次,否则无法实现虽然arrayList确实按<按字母顺序排序。所以我认为我只需要对数组进行多次排序,因为数组的大小是(所以3次)。

总而言之,String和Integer数据的顺序应该相同,因为它们依赖于它的另一个,但是我不能让它对两个数组都有效。

这些都没有效果。有人可以通过第二个阵列的排序告诉我这里我做错了什么吗?这是我的代码:

String ArrayList

1 个答案:

答案 0 :(得分:1)

排序索引列表而不是列表本身并不困难。从那里你可以轻松地重新排序列表。

public class Test {
    List<String> testStrings = Arrays.asList(new String[]{"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"});
    List<Integer> testNumbers = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});

    static <T extends Comparable<T>> List<Integer> getSortOrder(List<T> list) {
        // Ints in increasing order from 0. One for each entry in the list.
        List<Integer> order = IntStream.rangeClosed(0, list.size() - 1).boxed().collect(Collectors.toList());
        Collections.sort(order, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // Comparing the contents of the list at the position of the integer.
                return list.get(o1).compareTo(list.get(o2));
            }
        });
        return order;
    }

    static <T> List<T> reorder(List<T> list, List<Integer> order) {
        return order.stream().map(i -> list.get(i)).collect(Collectors.toList());
    }

    public void test() {
        System.out.println("The strings: " + testStrings);
        List<Integer> sortOrder = getSortOrder(testStrings);
        System.out.println("The order they would be if they were sorted: " + sortOrder + " i.e. " + reorder(testStrings, sortOrder));
        List<Integer> reordered = reorder(testNumbers, sortOrder);
        System.out.println("Numbers in alphabetical order of their names: " + reordered);
    }

    public static void main(String[] args) {
        new Test().test();
        System.out.println("Hello");
    }
}

打印:

  

琴弦:[一,二,三,四,五,六,七,八,九,十]

     

如果他们被分类的顺序:[7,4,3,8,0,6,5,9,2,1]即[八,五,四,九,一,七,六,十,三,二]

     

按姓名字母顺序排列的数字:[8,5,4,9,1,7,6,10,3,2]

如果您觉得需要,可以随意添加自定义比较器。