排序列表<list <string>&gt;按列表值</list <string>

时间:2012-02-15 06:55:46

标签: java list sorting

我希望按列表中的值对List进行排序,它包含三个值,第一个值是整数i将其转换为字符串,其他两个值本质上是字符串,我想按第一个字符串对列表进行排序。

List<List<String>> detail_View = new ArrayList<List<String>>();

List<String> fieldValues =fieldValues = new ArrayList<String>();
String aString = Integer.toString(ScreenId);
fieldValues.add(aString);
fieldValues.add(DisplayScreenName);
fieldValues.add(TableDisplay);

detail_View.add(fieldValues);

在上面的代码中,我必须按ScreenId对列表值进行排序

4 个答案:

答案 0 :(得分:4)

你必须使用两个概念:

  1. Collections.sort实用程序。
  2. Comparator<T> interface。
  3. 我写下你解决的问题:

    首先你必须写你的比较器:

    class CustomComparator implements Comparator<List<String>>
        {
            @Override
            public int compare(List<String> o1,
                List<String> o2)
            {
                String firstString_o1 = o1.get(0);
                String firstString_o2 = o2.get(0);
                return firstString_o1.compareTo(firstString_o2); 
            }
        }
    

    然后您使用Collections实用程序如下:

    Collections.sort(detail_View, new CustomComparator());
    

    在这些步骤之后,您的列表:

    List<List<String>> detail_View = new ArrayList<List<String>>();
    

    将按任何嵌套列表的第一个索引进行排序。

    有关此概念的更多信息,请参阅:

    1. http://www.javadeveloper.co.in/java-example/java-comparator-example.html
    2. http://www.roseindia.net/java/java-tips/data/collections_non_generic/comparators.shtml

答案 1 :(得分:3)

假设您不想按字母顺序对整数(存储为String)进行排序,则不能使用默认比较器,但必须先将其转换回整数:

Collections.sort(detail_view, new Comparator<List<String>>(){
    int compareTo(List<String> a, List<String> b){
         return Integer.valueOf(a.get(0)).compareTo(Integer.valueOf(b.get(0));
    }
});

我可以建议不要为这三个数据使用List,而是使用自己的bean类吗?

答案 2 :(得分:2)

用三个字段上课;不要将它们作为List<String>移动,这只是愚蠢的。使该类具有可比性将允许您根据自己的喜好对其进行排序。

答案 3 :(得分:1)

Java 8版本:

Collections.sort(fieldValues, Comparator.comparing(e -> e.get(0)));

此版本将整数排序为数字,而不是字符串:

Collections.sort(fieldValues, Comparator.comparing(e -> Integer.valueOf(e.get(0))));