【问题标题】:sorting list in android javaandroid java中的排序列表
【发布时间】:2021-07-26 14:51:56
【问题描述】:

我一直在尝试对 android 中的方法列表进行排序,但目前无法做到。这是实现

 public List<Items> getItems(@NotNull Context context){
        List<Items> tempList = new ArrayList<>();
        Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        String [] projection = {
                MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.TITLE,
                
        };
        Cursor cursor = context.getContentResolver().query(uri,projection,null,null,null);
        if (cursor != null){
            while (cursor.moveToNext()){
                String id = cursor.getString(0);
                String path = cursor.getString(1);
                String title = cursor.getString(2);

                Items items= new Items(id,path,title);
                
                tempVideos.add(items);
            }
            cursor.close();
        }
        return tempVideos;

我正在尝试按标题对列表进行排序,按以下方式通过此方法返回,但未按所需顺序排序。

List<Items> a = new ArrayList(Collections.singletonList(getItems(getActivity())));

        Collections.sort(a, new Comparator<Items>() {
            @Override
            public int compare(Items o1, Items o2) {
                if (o1 == null) return -1;
                else if (o2 == null) return 1;
                int cmp = String.CASE_INSENSITIVE_ORDER.compare(o1.getTitle(), o2.getTitle());
                if (cmp != 0) return cmp;
                return o1.getTitle().toLowerCase().compareTo(o2.getTitle().toLowerCase());
            }
        });

【问题讨论】:

    标签: android list sorting


    【解决方案1】:

    比较期望不清楚。

    以下代码对 char 到 char 进行比较,直到它们具有相同的长度,如果超出则返回其他。

    请注意:代码忽略大小写。如我所见,您需要忽略此案例。

    public static void main(String[] args) {
    
        TestCheck t = new TestCheck();
        List<Item> itemList = t.generateList();
        Comparator<Item> itemComparator = (o1, o2) -> {
            if(o1 == null) return -1;
            else if(o2 == null) return 1;
            char[] o1Item = o1.getTitle().toLowerCase().toCharArray();
            char[] o2Item = o2.getTitle().toLowerCase().toCharArray();
            int minLen = Math.min(o1Item.length, o2Item.length);
            for(int value = 0; value < minLen; value++) {
                int diff = o1Item[value] - o2Item[value];
                if(diff != 0) return diff;
            }
            if(o1Item.length == minLen) return 1;
            else return 0;
        };
        itemList.sort(itemComparator);
        itemList.forEach(System.out::println);
    }
    
    private List<Item> generateList() {
        List<Item> itemList = new LinkedList<>();
        IntStream.range(1, 10).forEach(value -> {
            itemList.add(new Item(value + "", "path", "title" + value));
        });
        itemList.add(new Item("13", "path", "winWIN"));
        itemList.add(new Item("14", "path", "XNInwd"));
        itemList.add(new Item("15", "path", "LWNDN"));
        itemList.add(new Item("16", "path", "ziubnd"));
        itemList.add(new Item("48", "path", "32bjsjdbf"));
        itemList.add(new Item("48", "path", "12bjsjdbf"));
    
        return itemList;
    }
    

    输出:

    Item{id='48', path='path', item='12bjsjdbf'}

    Item{id='48', path='path', item='32bjsjdbf'}

    Item{id='15', path='path', item='LWNDN'}

    Item{id='1', path='path', item='title1'}

    Item{id='2', path='path', item='title2'}

    Item{id='3', path='path', item='title3'}

    Item{id='4', path='path', item='title4'}

    Item{id='5', path='path', item='title5'}

    Item{id='6', path='path', item='title6'}

    Item{id='7', path='path', item='title7'}

    Item{id='8', path='path', item='title8'}

    Item{id='9', path='path', item='title9'}

    Item{id='13', path='path', item='winWIN'}

    Item{id='14', path='path', item='XNInwd'}

    Item{id='16', path='path', item='ziubnd'}

    【讨论】:

    • 输入通过上述列表传递时的预期输出是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2011-05-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多