首页 > 解决方案 > 如何按数字顺序对字符串和数字列表进行排序?

问题描述

如何以这样的非正式方式修复 id 的排序:

 1
10
11
..
2
20
21
..

我想打印如下:

1
2
3
..
10
11
..

此外,我的 MainData.getName 包含最多 1000 个 ListArrays 列表的字符串和数字,请参阅我的应用程序图片链接:

我试过这个,但它给出了相同的结果

int[] range = IntStream.rangeClosed(1, 1000).toArray();
List<String> rangeList = new ArrayList<>();
for (int number : range) {
    rangeList.add(String.valueOf(number));
}

这是我的 MainActivity

Api api = retrofit.create(Api.class);
    Call<List<MainData>> call = api.getData();
    call.enqueue(new Callback<List<MainData>>() {
        @Override
        public void onResponse (Call<List<MainData>> call, Response<List<MainData>> response) {
            if (!response.isSuccessful()) {
                Toast.makeText(MainActivity.this, response.code(), Toast.LENGTH_SHORT).show();
                return;
            }
            List<MainData> postList = response.body();
            // Filter out any items where "name" is blank or null.
            List<MainData> tempList = new ArrayList<>();
            for(MainData data :postList)
            {

                if(null!= data.getName() && !data.getName().isEmpty()) {

                     //sort by name
                    Collections.sort(tempList, (mainData, t1) -> mainData.getName().compareTo(t1.getName()));

                    int[] range = IntStream.rangeClosed(1, 1000).toArray();
                    List<String> rangeList = new ArrayList<>();
                    for (int number : range) {
                        rangeList.add(String.valueOf(number));
                    }

                    //sort by ListId
                    Collections.sort(tempList, (mainData, t1) -> mainData.getListId().compareTo(t1.getListId()) );

                    tempList.add(data);

                }
            }

            RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(tempList, MainActivity.this);
            recyclerView.setAdapter(recyclerViewAdapter);
        }

        @Override
        public void onFailure (Call<List<MainData>> call, Throwable t) {
            Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

这是我的 Json 数据

public class MainData {

    public String listId, name, id;

    public String getListId () {
        return listId;
    }

    public  String getName () {
        return name;
    }

    public  String getId () {
        return id;
    }
}

标签: javaandroidjsonarraylist

解决方案


由于您的 listId 是 String ,因此列表按字典顺序排序。相反,您可以先将字符串转换为整数,然后对其进行排序。下面是插图。

Collections.sort(tempList, (mainData, t1) -> Integer.parseInt(mainData.getListId())-Integer.parseInt(t1.getListId());

推荐阅读