【问题标题】:Java sort list containing list on index value of list?Java排序列表包含列表索引值的列表?
【发布时间】:2011-03-17 07:03:03
【问题描述】:

我有一个如下所示的嵌套列表(但它在一个主列表中有 1,000 个 holder 列表)。假设我需要根据holder.get(2) 索引上的每个holder 列表的值对主列表listEmailData 进行排序。我似乎无法弄清楚如何做到这一点,感谢任何建议。

ArrayList listEmailData;

ArrayList holder = new ArrayList();

listEmailData.add(3)
listEmailData.add(323)
listEmailData.add(2342)

listEmailData.add(holder)

编辑:为了澄清,我有一个列表,其中每个列表条目都包含一个子列表,在这个子列表中,一个特定的索引包含一个排名值。我需要根据每个子列表中的排名值对主列表进行排序。

第二次编辑:感谢您对此的帮助,让它工作了,但似乎它先放大数字,然后放大数字,我希望能扭转这一点,所以它像我一样从最大到最小

【问题讨论】:

    标签: java list sorting


    【解决方案1】:

    您应该实现Comparator<T> 来比较列表,然后调用

    Collections.sort(listEmailData, comparator);
    

    您的比较器必须比较任何两个“子列表” - 例如通过获取特定值。例如:

    public class ListComparator implements Comparator<List<Integer>>
    {
        private final int indexToCompare;
    
        public ListComparator(int indexToCompare)
        {
            this.indexToCompare = indexToCompare;
        }
    
        public int compare(List<Integer> first, List<Integer> second)
        {
            // TODO: null checking
            Integer firstValue = first.get(indexToCompare);
            Integer secondValue = second.get(indexToCompare);
            return firstValue.compareTo(secondValue);
        }
    }
    

    请注意,这是使用泛型 - 希望您的真实代码也是如此。

    【讨论】:

    • 对不起,如果我遗漏了一些明显的东西,但我不太确定如何比较列表中的数千个条目,然后对列表进行相应的排序,我可以看到调用 compare() 会在 2 个列表输入之间排序
    • @Rick:比较器比较任意两个列表。根据答案的第一部分,您使用此比较器在 列表列表 上使用 Collections.sort
    • @Rick - 你不会直接调用compare(),这是由Collections.sort(listEmailData, new ListComparator()) 为你处理的。
    • 好的,谢谢,我认为 Collections 中的 c 需要大写,我对 Java 中的集合一无所知,所以起初我认为这是一个常规变量对象名称
    • @Rick:抱歉,是的,这是一个错字。哎呀。
    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 2012-03-27
    • 2012-07-07
    • 2016-06-16
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多