按照列表值对List<List<String>>进行排序

5

我希望能够按列表中的值对列表进行排序,它包含三个值,第一个值是整数,我将其转换为字符串,另外两个值是字符串,我希望按第一个字符串对列表进行排序。

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对列表值进行排序


以下链接包含有类似问题的详细信息:https://dev59.com/6l7Va4cB1Zd3GeqPIlKM#19218759 - Dilip Prakash
4个回答

4

您需要使用两个概念:

  1. Collections.sort 实用程序。
  2. Comparator<T> 接口。

我将按照以下方式为您解决问题:

首先,您需要编写自己的比较器:

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

你可能需要先将字符串转换为整数。 - Thilo
是的,您可以在实现Comparator<T>接口时编写完整的自定义代码。 - Sam

3

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

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)来存储这三个数据,而是使用自己的Java Bean类来实现。


2

创建一个带有三个字段的类;不要将它们作为List<String>移动,那只是愚蠢的。使该类可比较将允许您按照自己的喜好进行排序。


1
Java 8版本:
Collections.sort(fieldValues, Comparator.comparing(e -> e.get(0)));

这个版本将按照数字而不是字符串对整数进行排序:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接