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

如何根据浮点字段对自定义ArrayList排序

文嘉禧
2023-03-14

我们使用可比接口对ArrayList进行排序,但我如何修改可比接口的CompareTo函数以根据浮点字段对数组列表进行排序,因为该函数返回int。

我试图按用户评级(浮动数据类型)对电影数据进行排序。下面是我创建的类,用于保存通过Json提要从网络调用获得的不同值。

/**
 * Created by anant on 2015-08-19.
 */
public class MoviesDetail implements Parcelable, Comparable<MoviesDetail> {

   private String jsf_original_title;
   private String jsf_poster;
   private String jsf_plot_synopsis;
   private float jsf_user_rating;
   private String jsf_release_date;
   private String jsf_results;
   private int jsf_id;

   public MoviesDetail() {

   }

   private MoviesDetail(Parcel p) {
      jsf_original_title = p.readString();
      jsf_poster = p.readString();
      jsf_plot_synopsis = p.readString();
      jsf_user_rating = p.readFloat();
      jsf_release_date = p.readString();
      jsf_results = p.readString();
      jsf_id = p.readInt();

   }

   public String getJsf_original_title() {
      return jsf_original_title;
   }

   public String getJsf_poster() {
      return jsf_poster;
   }

   public String getJsf_plot_synopsis() {
      return jsf_plot_synopsis;
   }

   public float getJsf_user_rating() {
      return jsf_user_rating;
   }

   public String getJsf_release_date() {
      return jsf_release_date;
   }

   public String getJsf_results() {
      return jsf_results;
   }

   public int getJsf_id() {
      return jsf_id;
   }

   public void setJsf_original_title(String jsf_original_title) {
      this.jsf_original_title = jsf_original_title;
   }

   public void setJsf_poster(String jsf_poster) {
      this.jsf_poster = jsf_poster;
   }

   public void setJsf_plot_synopsis(String jsf_plot_synopsis) {
      this.jsf_plot_synopsis = jsf_plot_synopsis;
   }

   public void setJsf_user_rating(float jsf_user_rating) {
      this.jsf_user_rating = jsf_user_rating;
   }

   public void setJsf_release_date(String jsf_release_date) {
      this.jsf_release_date = jsf_release_date;
   }

   public void setJsf_results(String jsf_results) {
      this.jsf_results = jsf_results;
   }

   public void setJsf_id(int jsf_id) {
      this.jsf_id = jsf_id;
   }

   @Override
   public int describeContents() {
      return 0;
   }

   @Override
   public void writeToParcel(Parcel dest, int flags) {

      dest.writeString(jsf_original_title);
      dest.writeString(jsf_poster);
      dest.writeString(jsf_plot_synopsis);
      dest.writeFloat(jsf_user_rating);
      dest.writeString(jsf_release_date);
      dest.writeString(jsf_results);
      dest.writeInt(jsf_id);

   }

   public final Parcelable.Creator<MoviesDetail> CREATOR = new Parcelable.Creator<MoviesDetail>() {

      /**
       * Create a new instance of the Parcelable class, instantiating it
       * from the given Parcel whose data had previously been written by
       * {@link Parcelable#writeToParcel Parcelable.writeToParcel()}.
       *
       * @param source The Parcel to read the object's data from.
       * @return Returns a new instance of the Parcelable class.
       */
      @Override
      public MoviesDetail createFromParcel(Parcel source) {
         return new MoviesDetail(source);

      }

      /**
       * Create a new array of the Parcelable class.
       *
       * @param size Size of the array.
       * @return Returns an array of the Parcelable class, with every entry
       * initialized to null.
       */
      @Override
      public MoviesDetail[] newArray(int size) {
         return new MoviesDetail[0];
      }
   };

   @Override
   public int compareTo(MoviesDetail aMovie) {

      int i = (int) aMovie.getJsf_user_rating();
      return getJsf_user_rating().compareTo(i);
   }
}

共有1个答案

弓明亮
2023-03-14

谢谢Slaven!!我也在尝试做下面的事情,似乎它确实奏效了。如果对以下内容有任何其他评论,请告知我

public int compareTo(MoviesDetail aMovie) {

   // int i = (int)another.getJsf_user_rating();
    if(aMovie.getJsf_user_rating()<this.getJsf_user_rating()){
        return -1;
    }

    else if(aMovie.getJsf_user_rating()==this.getJsf_user_rating()){
        return 0;
    }

        return 1;

}
 类似资料:
  • 问题内容: 如何根据自定义属性排序ArrayList中的对象? 问题答案: 从实现,它就有一个像方法一样的方法。 因此,你的自定义设置应如下所示: 该方法必须返回一个,因此无论如何你都无法直接返回一个你计划中的。 你的排序代码几乎就像你写的那样: 如果你不需要重用比较器,则编写所有这些内容的一种更短的方法是将其编写为内联匿名类: 自从Java-8 现在,你可以通过使用lambda表达式来以较短的形

  • Employee是上面定义的类之一,Address是Employee字段之一的数据类型之一。列表需要根据员工的字段中的进行排序。 这可以通过编写自定义比较器来完成。我正在寻找一种使用JavaLambda进行排序并获得排序列表的方法?

  • 我有一个假设 我的目的是以循环的方式基于来订购它。 输入: SortedList:

  • 我有一个,在用户中有姓名、姓氏、年龄等。我希望实现一个排序算法,根据用户年龄对arraylist进行排序。我搜索了很多,但只找到排序数组。

  • 我正在尝试根据是否已选中自定义复选框向签出添加费用。我真的很接近让这项工作,但我有问题获得后的价值观,以确定是否应申请或不收费。 以下是我自定义字段的代码: 这是可行的,而且字段显示得非常完美。 在我的主题中form-checkout.php的底部,我添加了以下javascript,以在检查字段时更新购物车总数: 这将更新订单总数并运行以下代码(这就是问题所在): 我知道这部分被调用是因为如果我去

  • 我检查了许多示例,但我不知道如何实现比较器或其他方法来解决我的问题。我试图清楚地解释我的问题。我有一个arrayList如下:我的Datamodel包括一个int作为id和一个String作为每个对象的名称; 我的第二个Arraylist还包括一个包含更多项的数据模型,但它还包括First Arraylist的值,如下所示: 现在我想根据firstArrayList(值顺序)对第二个arrayLi