对ArrayList <object>进行排序仅适用于更新的智能手机

时间:2019-02-16 12:28:02

标签: java android arraylist

我必须通过Object的值对ArrayList进行排序。我以前计算过的距离值。这可以完美地工作,但是如果我尝试将其升序排序,则较早的智能手机会显示与实际距离不同的值,但是距离计算正确。我认为这是因为我的排序方法。因此,无论当前安装了哪种操作系统,我如何都可以对该数组列表进行排序。这是我的对象:

public class SellerObject implements Serializable {

private String imageUrl, lat, lng, name, plz, id, size, price, typ, url;
private Float distance;


public SellerObject(String imageUrl, String lat, String lng, String name, String plz, String id, String size, String price, String typ, String url, Float distance) {
    this.imageUrl = imageUrl;
    this.lat = lat;
    this.lng = lng;
    this.name = name;
    this.plz = plz;
    this.id = id;
    this.size = size;
    this.price = price;
    this.typ = typ;
    this.url = url;
    this.distance = distance;
}

public String getTyp() {
    return typ;
}

public void setTyp(String typ) {
    this.typ = typ;
}

public SellerObject() {
}

public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

public String getLat() {
    return lat;
}

public void setLat(String lat) {
    this.lat = lat;
}

public String getLng() {
    return lng;
}

public void setLng(String lng) {
    this.lng = lng;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPlz() {
    return plz;
}

public void setPlz(String plz) {
    this.plz = plz;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public Float getDistance() {
    return distance;
}

public void setDistance(Float distance) {
    this.distance = distance;
}


public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

}

这是我的排序方法:

  private void SortUser(ArrayList<SellerObject> newSeller) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

        newSeller.sort(Comparator.comparing(SellerObject::getDistance));

    }
    loadingview.setVisibility(View.INVISIBLE);
    sellerAdapter sa = new sellerAdapter(getActivity(), newSeller, mlastLocation);
    sellerrv.setAdapter(sa);

}

2 个答案:

答案 0 :(得分:3)

仅当使用的Android版本为牛轧糖或更高版本时,您才对List<SellerObject>进行排序。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   newSeller.sort(Comparator.comparing(SellerObject::getDistance));
}

答案 1 :(得分:1)

只有在Android操作系统是牛轧糖或更高版本的情况下,您使用的AllarList不会在使用旧操作系统的手机中进行排序,并且您必须在ArrayList必需的API 24或更高版本中将其作为排序功能,以便解决游览问题,您还必须处理较旧的版本,Collections.sort将是您的理想解决方案。

因此,整个排序功能将如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   newSeller.sort(Comparator.comparing(SellerObject::getDistance));
}else{
    Collections.sort(newSeller, new Comparator<SellerObject>() {
        @Override
        public int compare(SellerObject item1, SellerObject item2) {
            return item1.getDistance.compareTo(item2.getDistance);
        }
    });
}