1. 程式人生 > >Android中對ListView、RecycleView裡面的資料進行排序方法總結

Android中對ListView、RecycleView裡面的資料進行排序方法總結

最近的開發過程中遇到了,按照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

相關推薦

AndroidListViewRecycleView裡面資料進行排序方法總結

最近的開發過程中遇到了,按照bean類中的多個欄位進行排序的情況,藉此機會把相關的排序做法,簡單整理備份一下。 1.list的單純排序 2.list元素為bean的情況,按照bean的某一個屬性進行排序 3.list元素為bean的情況,按照bean的多個屬性進行排序 import java.util.A

Excel根據某個表的順序另外一個表的資料進行排序

問題來源: 今天我們公司銷售部的庫管找我幫忙解決一個問題:3月份的庫存有2個表,A表是3.1的,B表是3.31,現在想要找出2個表的差異,但是400多個貨品在2個表中排序都不一樣;能不能將B表的貨品按照A表的順序排列呢? 首先我想到的是要用到Excel的哪些功能: 排序

低解析度視訊監控資料的人臉識別(LFW, YTF)+CVPR2013

現有的人臉識別資料庫,像Yale,YaleB,ORL等人臉資料庫,解析度高,良好對齊等datasets。。。 最近這方面的paper越來越少,逐漸向低解析度、大資料庫等監控中的images,更具挑戰性的資料集轉移~ 最近看到一篇中科院的一篇CVPR2013中的pap

androidsim卡聯絡人的增刪改查以及監聽sim卡聯絡資料的改變

sim卡聯絡人的增刪改查主要是通過ContentProvider來進行操作的,在android中對sim卡聯絡人操作的provider是定義在IccProvider.java這個類中的,這個類位於android原始碼的位置frameworks/base/telephony/

關於Android圖片大小記憶體佔用與drawable資料夾關係的研究與分析

研究內容研究方法測試環境研究過程結果分析結論 研究內容 本篇內容主要探討以下場景:同一張圖片,放置在不同的drawable資料夾,在同一裝置上執行,對圖片大小及記憶體佔用有什麼影響。 研究方法 控制變數法分析法 測試環境 採用錘子T1手機(1080*

AndroidHandle機制的理解

trac 意義 還要 break create findview curl net protected 一、重要參考資料 【參考資料】 眼下來看,以下的幾個網址中的內容質量比較不錯。基本不須要再讀別的網址了。 1、android消息機制一

AndroidListView的應用

and xbm pyo evc isf f11 info won ogg 玖w7拍hx仲每62菲獻0http://shufang.docin.com/nprrm06928 O2屏zz稈Q扇棧綠2oeuhttp://tushu.docin.com/vsxx68589

android的MD5Base64DES/3DES/ADES加解密

tid log str dpa enc csdn 長度 ttext public MD5摘要算法: <span style="font-size:18px;

Android集合的物件進行排序

最近需要一個對圖片物件進行排序的功能。 思路: 1、新建一個類實現Comparator<?>,這個類是實現比較的關鍵類,一般做比較的型別為int或String。 public class OrderSortUtil implements Comparator<

Android設定ListView的item高度無效--解決方案

原文地址:https://blog.csdn.net/zhonglinliu/article/details/54580622   問題:      ListView的使用中,item是在adapter中用來顯示每一個小條目的資

Android的HandlerLooper和MessageQueue的使用以及原理

       提到Handler大家一定都不陌生,通常我們都是在子執行緒通過在主執行緒中建立的Handler物件切換到主執行緒中去更新View的顯示內容,然而很少接觸Looper更沒有感覺到MessageQueue的存在,然而三者是密切相關的,那麼接下來分別介

AndroidOkHttp的封裝使用

一、OkHttp導包: compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.squareup.okio:okio:1.9.0' compile 'com.google.c

android某一個頁面設定常亮

android中如何保持頁面的方式四種 1.WakeLock 2.FLAG_KEEP_SCREEN_ON  3.keepScreenOn 4.MediaPlayer的 setScreenOnWhilePlaying(),這個用於視訊,MediaPlayer提供的方法

Android的dispatchTouchEvent()onInterceptTouchEvent()和onTouchEvent()

Android中觸控事件傳遞過程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。這個是困擾初學者的問題之一,我開始也是。這裡記錄一下dispatchTouchEvent()、onInter

angular/ionicimgiframe等的src進行動態繫結變數的問題解決

例如以下程式碼: 對應的html頁面中是這樣:<iframe class=“filling” [src] = “iframe”> 在這裡直接對src進行動態繫結變數就會出現:unsafe value used in a resource URL co

ListBox控制元件資料進行排序

實現效果:    知識運用:   ListBox控制元件的Sorted屬性  //ListBox控制元件中的資料項是否按字母順序排序   public bool Sorted{get;set;} 實現程式碼: private void button1_Click(object

Android設定ListView的選中的Item的背景顏色

    ListView中沒有預設的選擇顏色,只有選擇Item後的焦點顏色,滑鼠點選時Item有顏色,放開滑鼠後顏色也就沒有了,要實現放開滑鼠後選擇項的背景還是有顏色的 1、配置main.xml Java程式碼   <?xml version="1.0" encoding="utf-8"?&g

Spark元件Mllib的學習11之使用ALSmovieLens一百萬條(1M)資料進行訓練,並輸入的新使用者資料進行電影推薦

1解釋 spark-1.5.2 資料集:http://grouplens.org/datasets/movielens/ 一百萬條(1M) 資料劃分: 將樣本評分表以key值切分成3個部分,分別用於訓練 (60%,並加入使用者評分), 校驗 (20

android強引用軟引用弱引用。

強引用:直接引用一個物件軟引用:當記憶體不足&沒有其他地方引用時被gc回收。弱引用:無論記憶體是否充足,沒有其他地方引用時只要呼叫gc則被回收。ArrayList<String> list=new ArrayList<String>();

Android通過ListView的實現簡單新聞列表

Android中實現簡單的新聞列表 “本文主要針對Android新手,大神請繞道…” 使用到的第三方庫 Retrofit2+RxJava2 進行網路請和json資料的解析,註解框架:Butterknife 8.5.1 如果以上的框架還有同學不知道怎麼使用可以看看