当前位置: 首页 > 知识库问答 >
问题:

使用比较器和自定义ArrayAdapter对对象排序ArrayList

叶衡虑
2023-03-14

如何使用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;
}

我需要如何修改此适配器以使其与其他适配器一起工作?

谢谢你的帮助。

共有1个答案

戚阳
2023-03-14

您的假设是集合。排序(返回排序的集合错误。

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,然后执行(为简单起见