Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中数组对象的排序_Java_Android_Arrays - Fatal编程技术网

Java中数组对象的排序

Java中数组对象的排序,java,android,arrays,Java,Android,Arrays,我试图根据数组中的值对数组进行排序,我的代码正在编译,但没有排序 public void onResponse(TopScoreObject[] response) { try { if(response != null){ List<TopScoreObject> mList = arrayToListObject(response); Colle

我试图根据数组中的值对数组进行排序,我的代码正在编译,但没有排序

public void onResponse(TopScoreObject[] response) {
            try {
                if(response != null){
                    List<TopScoreObject> mList = arrayToListObject(response);
                    Collections.sort(mList, new Comparator<TopScoreObject>() {
                        @Override
                        public int compare(TopScoreObject topScoreObject, TopScoreObject t1) {
                            return topScoreObject.getUsername().compareTo(t1.getUsername());
                        }
                    });
                    Collections.reverse(mList);
                    mAdapter = new LadderBoardAdapter(mList);
                    mRecyclerView.setAdapter(mAdapter);
                } else{
                    DisplayMessage.displayErrorMessage(getActivity(), "No score found yet");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
public void onResponse(TopScoreObject[]响应){
试一试{
if(响应!=null){
List mList=arrayToListObject(响应);
Collections.sort(mList,newcomparator(){
@凌驾
公共整数比较(TopScoreObject TopScoreObject,TopScoreObject t1){
返回topCoreObject.getUsername().compareTo(t1.getUsername());
}
});
收款。反向(mList);
mAdapter=新梯板适配器(mList);
mRecyclerView.setAdapter(mAdapter);
}否则{
DisplayMessage.displayErrorMessage(getActivity(),“尚未找到分数”);
}
}捕获(例外e){
e、 printStackTrace();
}
}

我在这里做错了什么?

在代码中,您按自定义逻辑排序,然后使用默认的收集反转,这会损坏您的排序

收款。反向(mList)`

您可以将否定添加到排序逻辑并删除集合

List mList=arrayToListObject(响应);
Collections.sort(mList,newcomparator(){
@凌驾
公共整数比较(TopScoreObject TopScoreObject,TopScoreObject t1){
return!topCoreObject.getUsername().compareTo(t1.getUsername());
}
});

您可以尝试在Java 8中使用lambda按字母顺序对用户名进行排序,这样可以在用户名为null时处理null值

  public void onResponse(TopScoreObject[] response) {
    try {
      if(response != null){
        List<TopScoreObject> mList = new ArrayList<>(Arrays.asList(response));
        mList.sort(TopScoreObject::getUsername, Comparator.nullsLast(Comparator.reverseOrder()));
public void onResponse(TopScoreObject[]响应){
试一试{
if(响应!=null){
List mList=newarraylist(Arrays.asList(response));
sort(topCoreObject::getUsername,Comparator.nullsLast(Comparator.reverseOrder());
  • response是一个数组,请尝试使用
    Arrays.sort(response)
  • 无需将响应数组转换为Arraylist进行排序
  • 删除
    Collections.reverse(mList)
    ,因为您已经在对其进行排序
  • 如果使
    TopCoreObject
    实现
    Compariable
    ,并将排序规则移动到类
    TopCoreObject
    中,则会更容易、更清晰。这样,代码会更内聚,耦合性也会更低
  • 在对集合进行排序后,不要忘记赋值
    response=sorted.toArray();
  • 为什么不使用集合而不是数组呢

  • 你所说的“它不是排序”是什么意思?你想要的输出和给定的输入是什么?提供示例输入和输出。还要研究如何使用调试器一步一步地跟踪它。你打算按用户名或分数排序吗?你的示例尝试按用户名排序。作为一个简单的初学者,你可以尝试数组。排序(响应)我很抱歉。它起作用了。我只是忘了注意到我也在反转数组。使用
    reverse
    不会“破坏”排序,它只是反转排序。结果仍然是排序的,只是向后。
      public void onResponse(TopScoreObject[] response) {
        try {
          if(response != null){
            List<TopScoreObject> mList = new ArrayList<>(Arrays.asList(response));
            mList.sort(TopScoreObject::getUsername, Comparator.nullsLast(Comparator.reverseOrder()));