Android中对ListView、RecycleView里面的数据进行排序方法总结

关于java sort的几种实现方式(单纯排序,按照bean的某一个字段,按照bean的多个字段)

最近的开发过程中遇到了,按照bean类中的多个字段进行排序的情况,借此机会把相关的排序做法,简单整理备份一下。

1.list的单纯排序

2.list元素为bean的情况,按照bean的某一个属性进行排序

3.list元素为bean的情况,按照bean的多个属性进行排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import cn.com.ydd.bean.SortBean;
import cn.com.ydd.util.CommonUtil;

public class SortTest {
    public static void main(String[] args) {
        
        //1、单纯的一个list数据排序
        ArrayList lst = new ArrayList();
        lst.add("00000000001");
        lst.add("00000000002");
        lst.add("00000000003");
        lst.add("00000000004");
        lst.add("00000000005");
        //升序排序
        Collections.sort(lst);
        System.out.println(lst.toString());
        //降序排序
        Collections.reverse(lst);
        System.out.println(lst.toString());
        //2、list元素为Bean的情况下,根据Bean里面一个元素排序
        List<SortBean> list = new ArrayList<SortBean>();
        SortBean sb;
        sb = new SortBean();
        sb.setId("00001");
        sb.setName("田中");
        sb.setSex("F");
        list.add(sb);
        
        sb = new SortBean();
        sb.setId("00002");
        sb.setName("佐藤");
        sb.setSex("M");
        list.add(sb);
        
        sb = new SortBean();
        sb.setId("00003");
        sb.setName("佐藤");
        sb.setSex("M");
        list.add(sb);
        
        sb = new SortBean();
        sb.setId("00004");
        sb.setName("佐藤");
        sb.setSex("M");
        list.add(sb);
        
        
        sb = new SortBean();
        sb.setId("00005");
        sb.setName("山本");
        sb.setSex("F");
        list.add(sb);
        
        sb = new SortBean();
        sb.setId("00006");
        sb.setName("山本");
        sb.setSex("F");
        list.add(sb);
        
        //降順
        System.out.println("***********name:降順*************");
        CommonUtil.sort(list, "name", false);
        for(SortBean item : list){
            System.out.print(item.getId()+"    ");
            System.out.print(item.getName()+"    ");
            System.out.println(item.getSex());
        }
        //升序
        System.out.println("***********name:昇順*************");
        CommonUtil.sort(list, "name", true);
        for(SortBean item : list){
            System.out.print(item.getId()+"    ");
            System.out.print(item.getName()+"    ");
            System.out.println(item.getSex());
        }
        
        System.out.println("***********name:昇順 ID:降順*************");
        //3、list元素为Bean的情况下,根据Bean里面多个元素排序
        Map<String, String> sortParam = new LinkedHashMap<String, String>();
        //name:升序 ID:降序
        sortParam.put("name", "asc");
        sortParam.put("id", "desc");
        CommonUtil.sortExecute(list, sortParam);
        
        for(SortBean item : list){
            System.out.print(item.getId()+"    ");
            System.out.print(item.getName()+"    ");
            System.out.println(item.getSex());
        }
        sortParam.clear();
        //name:降序 ID:升序
        sortParam.put("name", "desc");
        sortParam.put("id", "asc");
        CommonUtil.sortExecute(list, sortParam);
        System.out.println("***********name:降順 ID:昇順*************");
        for(SortBean item : list){
            System.out.print(item.getId()+"    ");
            System.out.print(item.getName()+"    ");
            System.out.println(item.getSex());
        }
    }
}

 

共通方法类

import java.util.Comparator;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.collections4.comparators.ComparableComparator;
import org.apache.commons.collections4.comparators.ComparatorChain;
import org.apache.commons.collections4.comparators.NullComparator;

public class CommonUtil {

    /**
     * 根据Bean下面的一个元素排序
     * @param list
     * @param filedName
     * @param ascFlag
     */
    @SuppressWarnings("unchecked")
    public static void sort(List list, String filedName, boolean ascFlag) {

        if (list.size() == 0 || filedName.equals("")) {
            return;
        }
        Comparator<?> cmp = ComparableComparator.INSTANCE;
        // 降序
        if (ascFlag) {
            cmp = ComparatorUtils.nullLowComparator(cmp);
        } else {
            cmp = ComparatorUtils.reversedComparator(cmp);

        }
        Collections.sort(list, new BeanComparator(filedName, cmp));
    }
    
    /**
     * 根据Bean下面的多个元素排序
     * @param beans
     * @param sortParam
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void sortExecute(List<?> beans, Map<String, String> sortParam) {

        if (beans.size() == 0 || sortParam.keySet().size() == 0) {
            return;
        }
        if (beans.isEmpty() || sortParam.isEmpty()) {
            return;
        }
        ComparatorChain comparator = new ComparatorChain();
        boolean sortMethod = false;
        for (String itemName : sortParam.keySet()) {
            sortMethod = false;
            if ("desc".equals(sortParam.get(itemName))) {
                sortMethod = true;
            }
            comparator.addComparator(new BeanComparator(itemName, new NullComparator()), sortMethod);
        }
        Collections.sort(beans, comparator);
    }

}

 输出结果

[00000000001, 00000000002, 00000000003, 00000000004, 00000000005]
[00000000005, 00000000004, 00000000003, 00000000002, 00000000001]
***********name:降順*************
00001    田中    F
00005    山本    F
00006    山本    F
00002    佐藤    M
00003    佐藤    M
00004    佐藤    M
***********name:昇順*************
00002    佐藤    M
00003    佐藤    M
00004    佐藤    M
00005    山本    F
00006    山本    F
00001    田中    F
***********name:昇順 ID:降順*************
00004    佐藤    M
00003    佐藤    M
00002    佐藤    M
00006    山本    F
00005    山本    F
00001    田中    F
***********name:降順 ID:昇順*************
00001    田中    F
00005    山本    F
00006    山本    F
00002    佐藤    M
00003    佐藤    M
00004    佐藤    M

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值