我希望按列表中的值对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对列表值进行排序
答案 0 :(得分:4)
你必须使用两个概念:
Collections.sort
实用程序。Comparator<T>
interface。我写下你解决的问题:
首先你必须写你的比较器:
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 :(得分: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))));