如何使用Comparator对对象的ArrayList进行正确排序,然后将排序后的数组传递给自定义数组适配器?
我试过这样做:
ArrayList的内容类:
public class CoursesData {
private String url;
private String name;
private String lessonsCount;
private String isFree;
private String price;
private String language;
private String difficulty;
private AuthorData author;
.....getters-setters
}
比较器:
class CoursesPriceComparator implements Comparator <CoursesData> {
public int compare (CoursesData left, CoursesData right){
return left.getPrice().compareTo(right.getPrice());
}
}
在OnCreate中设置适配器:
mAdapter = new CoursesItemAdapter(getActivity(),
R.layout.catalog_list_item,
Collections.sort(parserJson.getCourses(), new CoursesPriceComparator()));
...因为我使用的是定制的ArrayAdapter,就像:
class CoursesItemAdapter extends ArrayAdapter<CoursesData> {
private Activity myContext;
private ArrayList<CoursesData> datas;
public CoursesItemAdapter(Context context, int textViewResourceId, ArrayList<CoursesData> objects){
super(context, textViewResourceId, objects);
myContext = (Activity) context;
datas = objects;
}
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder viewHolder;
if(convertView == null) {
LayoutInflater inflater = myContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.catalog_list_item, null);
viewHolder = new ViewHolder();
viewHolder.postNameView = (TextView) convertView.findViewById(R.id.courses_name);
viewHolder.postDifficultyView = (TextView) convertView.findViewById(R.id.difficulty);
viewHolder.postAuthorView = (TextView) convertView.findViewById(R.id.author);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.postNameView.setText(datas.get(position).getName());
viewHolder.postAuthorView.setText(datas.get(position).getAuthor().getName());
viewHolder.postDifficultyView.setText(datas.get(position).getDifficulty());
return convertView;
}
static class ViewHolder{
TextView postNameView;
TextView postAuthorView;
TextView postDifficultyView;
}
我需要如何修改此适配器以使其与其他适配器一起工作?
谢谢你的帮助。
您的假设是集合。排序(
返回排序的集合错误。
mAdapter = new CoursesItemAdapter(getActivity(),
R.layout.catalog_list_item,
Collections.sort(parserJson.getCourses(), new CoursesPriceComparator()));
应该是
ArrayList< CoursesData > data = parserJson.getCourses();
Collections.sort(parserJson.getCourses(), new CoursesPriceComparator())
mAdapter = new CoursesItemAdapter(getActivity(),
R.layout.catalog_list_item,
data);
收藏。排序
返回类型为空。在这里查看文档
我有以下清单: 这是我的比较器函数: 我正在尝试使用它排序如下: 我不明白为什么第一个NaN不在列表的末尾。 我对升序排序列表的预期输出是: 我对降序排序列表的预期输出是: 在升序排序和降序排序的情况下,我希望NaNs在最后。 我知道sortwith使我们能够编写自己的比较器。有人能帮我吗?
要做到这一点,最干净的捷径是什么? 我知道它可以通过自定义比较器来实现。对于这种情况,难道没有现成的东西吗? 有点像这样:
问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序
我想使用比较器对String类型的ArrayList进行排序。我只找到了如何在ArrayList存储对象时执行此操作的示例。 我有一个包含10个符号的字符串数组列表,最后5个符号是数字。我想按照每个字符串末尾的数字的升序来求解数组列表。我该怎么做? 谢谢
问题内容: 我需要使用自定义比较器对整数数组进行排序,但是Java的库没有为带有比较器的整数提供排序功能(比较器只能与对象一起使用)。有没有简单的方法可以做到这一点? 问题答案: 如果你无法更改输入数组的类型,则将执行以下操作: 这可以使用ArrayUtilscommons-lang项目轻松地在和之间进行转换,创建数组的副本,进行排序,然后将排序后的数据复制到原始数据上。
问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见