按整数排序列表

时间:2018-02-11 10:32:42

标签: java android

我从数据库中获取纬度和经度,并计算RecyclerView适配器中两个人之间的距离。

我想按距离对这些项目进行排序,但我不知道如何做到这一点。

我的适配器:

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder>{

Context context;
List<HomeGetter> homeGetters;
HomeCallback homeCallback;

public HomeAdapter(Context context, List<HomeGetter> homeGetters, HomeCallback homeCallback) {
    this.context = context;
    this.homeGetters = homeGetters;
    this.homeCallback = homeCallback;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.custom_home_profil,parent,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    calculate_age calculate_age = new calculate_age();
    final HomeGetter homeGetter = homeGetters.get(position);



        String[] splittedAge = homeGetter.getBirthday().split("\\.");
        try {
            String age = calculate_age.getAge(context,Integer.valueOf(splittedAge[0]),Integer.valueOf(splittedAge[1]),Integer.valueOf(splittedAge[2]));
            String username = homeGetter.getUsername().substring(0,1).toUpperCase() + homeGetter.getUsername().substring(1);
            holder.textViewUsername.setText(username + "," + age);
        } catch (ParseException e) {
            e.printStackTrace();
        }

    Picasso.with(context).load(homeGetter.getImageURL()).resize(600,700).centerCrop().into(holder.imageView);

    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            homeCallback.getPosition(position);
        }
    });

    holder.textViewLocation.setText(homeGetter.getLocation());

    if(homeGetter.getStatus().equals("0")){
        holder.status.setImageDrawable(context.getResources().getDrawable(R.drawable.offline));
    }else {
        holder.status.setImageDrawable(context.getResources().getDrawable(R.drawable.online));
    }



}

@Override
public int getItemCount() {
    return homeGetters.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView;
    TextView textViewUsername;
    CardView cardView;
    TextView textViewLocation;
    ImageView status;

    public ViewHolder(View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.imageViewThumb);
        textViewUsername = itemView.findViewById(R.id.textViewProfilUsername);
        cardView = itemView.findViewById(R.id.cardViewProfil);
        textViewLocation = itemView.findViewById(R.id.textViewLocation);
        status = itemView.findViewById(R.id.imageViewOnlinestatus);
    }

}
}

在这一行,我得到以km为单位的距离:

holder.textViewLocation.setText(homeGetter.getLocation());

例如544

是否可以对适配器中的列表进行排序? 或者我该如何排序呢? 那么,我该如何实现呢?

活动

pullData.getData(USERNAME, "1", new Pullcallback() {
        @Override
        public void getSingleData(String data) {

        }

        @Override
        public void getMultipleData(String[] multipledatas) {
            GENDER = multipledatas[5];
            GENDERSEARCH = multipledatas[6];

            GetStrangers getStrangers = new GetStrangers(Home.this);
            Map<String,String> map = new HashMap<>();
            map.put("USERNAME",USERNAME);
            map.put("GENDER",GENDER);
            map.put("SEARCH",GENDERSEARCH);
            getStrangers.strangers(map, "7", new Pullcallback() {
                @Override
                public void getSingleData(String data) {

                }

                @Override
                public void getMultipleData(final String[] multipledatas) {

                    // username,imagelink,position,birthday
                    // imageURL,username,birthday,location

                    pullData.getData(USERNAME, "2", new Pullcallback() {
                        @Override
                        public void getSingleData(String data) {

                        }

                        @Override
                        public void getMultipleData(String[] multipledatas2) {

                            String[] split1 = multipledatas2[1].split(",");
                            String[] split2 = multipledatas[2].split(",");

                            float lat1 = Float.valueOf(split1[0]);
                            float lng1 = Float.valueOf(split1[1]);

                            float lat2 = Float.valueOf(split2[0]);
                            float lng2 = Float.valueOf(split2[1]);

                            Collections.sort(getterList, new Comparator<HomeGetter>() {
                                public int compare(HomeGetter s1, HomeGetter s2) {
                                    return Integer.compare(Integer.parseInt(s1.getLocation()), Integer.parseInt(s2.getLocation()));
                                }
                            });

                            homeGetter = new HomeGetter(multipledatas[1],multipledatas[0],multipledatas[3],String.valueOf(Math.round(Calculator.calculateDistance(lat1,lng1,lat2,lng2))),multipledatas[4]);

                            getterList.add(homeGetter);

                            homeAdapter.notifyDataSetChanged();

                            loading.setVisibility(View.GONE);
                            content.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onError(String errormessage) {

                        }
                    });
                }

                @Override
                public void onError(String errormessage) {

                }
            });
        }

        @Override
        public void onError(String errormessage) {

        }
    });

    pullData.getData(USERNAME, "2", new Pullcallback() {
        @Override
        public void getSingleData(String data) {

        }

        @Override
        public void getMultipleData(String[] multipledatas) {

            if(multipledatas[7].equals("0")){

                Intent intentFirststep = new Intent(Home.this,Firststep.class);
                startActivity(intentFirststep);
                finish();
            }else {

            }
        }

        @Override
        public void onError(String errormessage) {

        }
    });


    recyclerViewHome = findViewById(R.id.recyclerViewHome);
    homeAdapter = new HomeAdapter(Home.this, getterList, new HomeCallback() {
        @Override
        public void getPosition(int position) {
            Intent stranger = new Intent(Home.this,Stranger.class);
            stranger.putExtra("USERNAME",getterList.get(position).getUsername());
            startActivity(stranger);
            finish();
        }
    });
    recyclerViewHome.setHasFixedSize(true);
    recyclerViewHome.setLayoutManager(new GridLayoutManager(Home.this,3));
    recyclerViewHome.setItemAnimator(new DefaultItemAnimator());
    recyclerViewHome.setAdapter(homeAdapter);

}

但它没有正常工作它显示我4,14,507和12 但它有点排序4,12,14,507

2 个答案:

答案 0 :(得分:4)

在您传递requests 2.18.4的活动中,只需在传递之前执行此操作。

ArrayList

P.S。如果您已经存储为整数,请不要使用解析。 很乐意提供帮助。

编辑: 把它放在这里 -

Collections.sort(homeGetter, new Comparator<HomeGetter>() {
                public int compare(HomeGetter s1, HomeGetter s2) {
                    return Integer.compare(Integer.parseInt(s1.getLocation()), Integer.parseInt(s2.getLocation()));
                }
            });

答案 1 :(得分:1)

您还可以使用比较器和放大器对List<HomeGetter> homegetters进行排序。然后使用已排序的主目录列表初始化HomeAdapter

一个例子:

homegetters.sort((hG1, hG2) -> hG1.getLocation().compareTo(hG2.getLocation()));

以上行将根据getLocation()对主页列表进行排序。

修改

在您的活动中,您首先对列表进行排序,然后在其中添加项目。 你应该首先添加所有项目&amp;然后对List进行排序。