Android List<T> 排序

本文介绍了使用Java进行集合排序的方法,包括自定义对象的排序和字符串列表的两种不同排序方式。对于对象排序,通过实现Comparator接口来指定排序规则;对于包含数值的字符串列表,则采用先转换为数值类型再进行比较的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.T排序

List<GroupBean> groupBeans ;


Collections.sort(groupBeans,new Comparator<GroupBean>(){

            public int compare(GroupBean arg0, GroupBean arg1) {
                return new Integer(arg0.sortno).compareTo(arg1.sortno);
            }

        });


        for(GroupBean u : groupBeans){
        Log.e("排序", u.sortno+" "+u.groupname);

        }


2. 字符串

ArrayList list = new ArrayList();
    list.add("92.8");
    list.add("68.9");
    list.add("168.61");
    list.add("242");
    list.add("317");
    list.add("105");
    // 字符串排序
    Collections.sort(list);
    System.out.println(list.toString()); // [105, 168.61, 242, 317, 68.9, 92.8]
    //double排序
    Collections.sort(list, new Comparator() {
      @Override
      public int compare(Object o1, Object o2) {
        return new Double((String) o1).compareTo(new Double((String) o2));
      }
    });
    System.out.println(list.toString()); // [68.9, 92.8, 105, 168.61, 242, 317]
  }

package com.example.kucun2.entity.data; import android.os.Handler; import android.os.Looper; import android.util.Log; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class SynchronizedList<T extends SynchronizableEntity> { private static final String TAG = "AsyncEntityList"; private final List<T> internalList = new CopyOnWriteArrayList<>(); private final List<ListChangeListener<T>> listeners = new ArrayList<>(); private final EntityChangeListener<T> entityChangeListener = new EntityChangeListener<>(); private Class<T> type; // 列表变更监听器接口 public interface ListChangeListener<T> { void onItemAdded(T item, int position); void onItemRemoved(T item, int position); void onSyncStarted(T item); void onSyncSuccess(T item); void onSyncFailure(T item, String error); void onListChanged(); } public Class<T> getType() { return type; } public SynchronizedList(Class<T> type) { this.type=type; } // 操作回调接口 public interface OperationCallback<T> { void onSuccess(T item); void onFailure(T item, String error); } // 注册监听器 public void addListChangeListener(ListChangeListener<T> listener) { listeners.add(listener); } // 移除监听器 public void removeListChangeListener(ListChangeListener<T> listener) { listeners.remove(listener); } // 通知所有监听器 private void notifyListeners(Runnable action) { new Handler(Looper.getMainLooper()).post(() -> { for (ListChangeListener<T> listener : listeners) { action.run(); } }); } // 异步添加元素 public void addAsync(T item, OperationCallback<T> callback) { if (item == null || internalList.contains(item)) return; // 1. 预添加状态(UI可立即显示) int position = internalList.size(); internalList.add(item); registerListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onItemAdded(item, position); listener.onSyncStarted(item); } }); // 2. 后台执行同步 new Thread(() -> { item.sync("add", new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncSuccess((T) entity); listener.onListChanged(); } }); if (callback != null) callback.onSuccess((T) entity); } @Override public void onSyncFailure(String error) { internalList.remove(item); unregisterListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncFailure((T) item, error); listener.onItemRemoved((T) item, position); } }); if (callback != null) callback.onFailure((T) item, error); } }); }).start(); } // 异步移除元素 public void removeAsync(T item, OperationCallback<T> callback) { if (!internalList.contains(item)) return; int position = internalList.indexOf(item); internalList.remove(item); unregisterListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onItemRemoved(item, position); listener.onSyncStarted(item); } }); new Thread(() -> { item.sync("remove", new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncSuccess((T) entity); } }); if (callback != null) callback.onSuccess((T) entity); } @Override public void onSyncFailure(String error) { internalList.add(position, item); // 回滚 registerListener(item); notifyListeners(() -> { for (ListChangeListener<T> listener : listeners) { listener.onSyncFailure((T) item, error); listener.onItemAdded(item, position); } }); if (callback != null) callback.onFailure((T) item, error); } }); }).start(); } // 获取不可修改的列表视图(用于RecyclerView) public List<T> getViewList() { return Collections.unmodifiableList(internalList); } // 实体变更监听器 private static class EntityChangeListener<T extends SynchronizableEntity> implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { ((T) evt.getSource()).sync(null); } } private void registerListener(T element) { if (element != null) { element.addPropertyChangeListener(entityChangeListener); } } private void unregisterListener(T element) { if (element != null) { element.removePropertyChangeListener(entityChangeListener); } } } removePropertyChangeListener?
最新发布
06-25
package com.example.kucun2.entity.data; import android.annotation.SuppressLint; import android.util.Log; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /** * 支持数据变更自动同步的泛型集合类 * 基于SynchronizableEntity的事件机制实现数据变更自动同步 * * @param <T> 必须是SynchronizableEntity或其子类 */ public class SynchronizedList<T extends SynchronizableEntity> implements List<T> { // 使用ArrayList作为底层存储 private final List<T> list = new ArrayList<>(); public Class<T> getEntityType() { return entityType; } private Class<T> entityType; public SynchronizedList(Class<T> T) { this.entityType = T; } // 实体变更监听器 private final EntityChangeListener<T> entityChangeListener = new EntityChangeListener<>(); @Override public int size() { return list.size(); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public boolean contains(Object o) { return list.contains(o); } @Override public Iterator<T> iterator() { return new SyncedIterator<>(list.iterator(), entityChangeListener); } @Override public Object[] toArray() { return list.toArray(); } @Override public <E> E[] toArray(E[] a) { return list.toArray(a); } // 添加元素时注册监听器 @SuppressLint("SuspiciousIndentation") // 在 SynchronizedList 类中修改添加方法 @Override public boolean add(T element) { if (element != null && !list.contains(element)) { element.addPropertyChangeListener(entityChangeListener); boolean added = list.add(element); // 如果是新实体并且同步功能开启,则触发同步 if (added && syncEnabled /*报红没定义*/&& element.getState() == SynchronizableEntity.SyncState.NEW) { element.syncWithDependencies(new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { Log.d("Sync", "Successfully synced new entity: " + entity); } @Override public void onSyncFailure(String error) { Log.e("Sync", "Failed to sync new entity: " + error); } }); } return added; } return false; } // 移除元素时注销监听器 @Override public boolean remove(Object o) { if (o instanceof SynchronizableEntity) { ((SynchronizableEntity) o).removePropertyChangeListener(entityChangeListener); } return list.remove(o); } @Override public boolean containsAll(Collection<?> c) { return list.containsAll(c); } // 批量添加时逐个注册监听器 @Override public boolean addAll(Collection<? extends T> c) { for (T element : c) { if (element != null) { element.addPropertyChangeListener(entityChangeListener); } } return list.addAll(c); } @Override public boolean addAll(int index, Collection<? extends T> c) { for (T element : c) { if (element != null) { element.addPropertyChangeListener(entityChangeListener); } } return list.addAll(index, c); } // 批量移除时逐个注销监听器 @Override public boolean removeAll(Collection<?> c) { for (Object o : c) { if (o instanceof SynchronizableEntity) { ((SynchronizableEntity) o).removePropertyChangeListener(entityChangeListener); } } return list.removeAll(c); } @Override public boolean retainAll(Collection<?> c) { // 先移除未保留元素的监听器 for (T element : list) { if (!c.contains(element)) { element.removePropertyChangeListener(entityChangeListener); } } return list.retainAll(c); } // 清空集合时移除所有监听器 @Override public void clear() { for (T element : list) { element.removePropertyChangeListener(entityChangeListener); } list.clear(); } @Override public T get(int index) { return list.get(index); } // 替换元素时更新监听器 @Override public T set(int index, T element) { T oldElement = list.get(index); if (oldElement != null) { oldElement.removePropertyChangeListener(entityChangeListener); } if (element != null) { element.addPropertyChangeListener(entityChangeListener); } return list.set(index, element); } // 在指定位置添加元素时注册监听器 @Override public void add(int index, T element) { if (element != null && !list.contains(element)) { element.addPropertyChangeListener(entityChangeListener); list.add(index, element); } } // 移除元素时注销监听器 @Override public T remove(int index) { T removed = list.remove(index); if (removed != null) { removed.removePropertyChangeListener(entityChangeListener); } return removed; } @Override public int indexOf(Object o) { return list.indexOf(o); } @Override public int lastIndexOf(Object o) { return list.lastIndexOf(o); } @Override public ListIterator<T> listIterator() { return new SyncedListIterator<>(list.listIterator(), entityChangeListener); } @Override public ListIterator<T> listIterator(int index) { return new SyncedListIterator<>(list.listIterator(index), entityChangeListener); } @Override public List<T> subList(int fromIndex, int toIndex) { return list.subList(fromIndex, toIndex); } /** * 内部实体变更监听器 * 监听属性变化并触发同步操作 */ private static class EntityChangeListener<T extends SynchronizableEntity> implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { @SuppressWarnings("unchecked") T entity = (T) evt.getSource(); entity.sync(null); // 触发同步操作 } } /** * 增强的Iterator实现 * 移除元素时自动注销监听器 */ private static class SyncedIterator<T extends SynchronizableEntity> implements Iterator<T> { private final Iterator<T> iterator; private final EntityChangeListener<T> listener; private T current; public SyncedIterator(Iterator<T> iterator, EntityChangeListener<T> listener) { this.iterator = iterator; this.listener = listener; } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { current = iterator.next(); return current; } @Override public void remove() { if (current != null) { current.removePropertyChangeListener(listener); } iterator.remove(); } } /** * 增强的ListIterator实现 * 支持添加/设置元素时的监听器管理 */ private static class SyncedListIterator<T extends SynchronizableEntity> implements ListIterator<T> { private final ListIterator<T> iterator; private final EntityChangeListener<T> listener; private T lastReturned; public SyncedListIterator(ListIterator<T> iterator, EntityChangeListener<T> listener) { this.iterator = iterator; this.listener = listener; } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { lastReturned = iterator.next(); return lastReturned; } @Override public boolean hasPrevious() { return iterator.hasPrevious(); } @Override public T previous() { lastReturned = iterator.previous(); return lastReturned; } @Override public int nextIndex() { return iterator.nextIndex(); } @Override public int previousIndex() { return iterator.previousIndex(); } @Override public void remove() { if (lastReturned != null) { lastReturned.removePropertyChangeListener(listener); } iterator.remove(); } @Override public void set(T e) { if (lastReturned != null) { lastReturned.removePropertyChangeListener(listener); } if (e != null) { e.addPropertyChangeListener(listener); } iterator.set(e); lastReturned = e; } @Override public void add(T e) { if (e != null) { e.addPropertyChangeListener(listener); } iterator.add(e); } } }
06-19
package com.example.kucun2.entity.data; import android.annotation.SuppressLint; import android.util.Log; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /** * 支持数据变更自动同步的泛型集合类 * 基于SynchronizableEntity的事件机制实现数据变更自动同步 * * @param <T> 必须是SynchronizableEntity或其子类 */ public class SynchronizedList<T extends SynchronizableEntity> implements List<T> { // 使用ArrayList作为底层存储 private final List<T> list = new ArrayList<>(); // 添加同步启用标志 private static boolean syncEnabled = true; public static void setSyncEnabled(boolean enabled) { syncEnabled = enabled; } public Class<T> getEntityType() { return entityType; } private Class<T> entityType; public SynchronizedList(Class<T> T) { this.entityType = T; } // 实体变更监听器 private final EntityChangeListener<T> entityChangeListener = new EntityChangeListener<>(); @Override public int size() { return list.size(); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public boolean contains(Object o) { return list.contains(o); } @Override public Iterator<T> iterator() { return new SyncedIterator<>(list.iterator(), entityChangeListener); } @Override public Object[] toArray() { return list.toArray(); } @Override public <E> E[] toArray(E[] a) { return list.toArray(a); } // 添加元素时注册监听器并触发同步 @SuppressLint("SuspiciousIndentation") @Override public boolean add(T element) { if (element != null && !list.contains(element)) { element.addPropertyChangeListener(entityChangeListener); boolean added = list.add(element); // 如果是新实体并且同步功能开启,则触发同步 if (added && syncEnabled && element.getState() == SynchronizableEntity.SyncState.NEW) { element.syncWithDependencies(new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { Log.d("Sync", "Successfully synced new entity: " + entity); } @Override public void onSyncFailure(String error) { Log.e("Sync", "Failed to sync new entity: " + error); // 处理同步失败(如重试或通知用户) handleSyncFailure(element, error); } }); } return added; } return false; } // 处理同步失败 private void handleSyncFailure(T entity, String error) { // 这里可以实现重试逻辑或错误处理 Log.e("SyncFailure", "Entity sync failed: " + entity + ", error: " + error); // 示例:3次重试逻辑 if (entity.getSyncRetryCount()/*报红没定义*/ < 3) { entity.incrementSyncRetryCount();/*报红没定义*/ Log.d("SyncRetry", "Retrying sync for: " + entity + ", attempt: " + entity.getSyncRetryCount());/*报红没定义*/ // 延迟后重试 new android.os.Handler().postDelayed(() -> { entity.syncWithDependencies(new SynchronizableEntity.SyncCallback() { @Override public void onSyncSuccess(SynchronizableEntity entity) { Log.d("SyncRetry", "Retry successful for: " + entity); } @Override public void onSyncFailure(String error) { Log.e("SyncRetry", "Retry failed for: " + entity + ", error: " + error); } }); }, 5000); // 5秒后重试 } else { Log.e("SyncFailure", "Max retries exceeded for: " + entity); // 标记为需要手动处理的失败状态 entity.setState(SynchronizableEntity.SyncState.FAILED); } } // 移除元素时注销监听器 @Override public boolean remove(Object o) { if (o instanceof SynchronizableEntity) { ((SynchronizableEntity) o).removePropertyChangeListener(entityChangeListener); } return list.remove(o); } @Override public boolean containsAll(Collection<?> c) { return list.containsAll(c); } // 批量添加时逐个注册监听器 @Override public boolean addAll(Collection<? extends T> c) { boolean changed = false; for (T element : c) { if (element != null && add(element)) { changed = true; } } return changed; } @Override public boolean addAll(int index, Collection<? extends T> c) { boolean changed = false; int i = index; for (T element : c) { if (element != null) { add(i, element); i++; changed = true; } } return changed; } // 批量移除时逐个注销监听器 @Override public boolean removeAll(Collection<?> c) { boolean changed = false; for (Object o : c) { if (remove(o)) { changed = true; } } return changed; } @Override public boolean retainAll(Collection<?> c) { // 先移除未保留元素的监听器 List<T> toRemove = new ArrayList<>(); for (T element : list) { if (!c.contains(element)) { toRemove.add(element); } } return removeAll(toRemove); } // 清空集合时移除所有监听器 @Override public void clear() { for (T element : list) { element.removePropertyChangeListener(entityChangeListener); } list.clear(); } @Override public T get(int index) { return list.get(index); } // 替换元素时更新监听器 @Override public T set(int index, T element) { T oldElement = list.get(index); if (oldElement != null) { oldElement.removePropertyChangeListener(entityChangeListener); } if (element != null) { element.addPropertyChangeListener(entityChangeListener); // 如果元素是新的,触发同步 if (syncEnabled && element.getState() == SynchronizableEntity.SyncState.NEW) { element.syncWithDependencies(null); } } return list.set(index, element); } // 在指定位置添加元素时注册监听器 @Override public void add(int index, T element) { if (element != null && !list.contains(element)) { element.addPropertyChangeListener(entityChangeListener); list.add(index, element); // 如果是新实体并且同步功能开启,则触发同步 if (syncEnabled && element.getState() == SynchronizableEntity.SyncState.NEW) { element.syncWithDependencies(null); } } } // 移除元素时注销监听器 @Override public T remove(int index) { T removed = list.remove(index); if (removed != null) { removed.removePropertyChangeListener(entityChangeListener); // 如果元素已同步,标记为删除并同步 if (syncEnabled && removed.getState() == SynchronizableEntity.SyncState.SYNCED) { removed.setState(SynchronizableEntity.SyncState.DELETED); removed.sync(null); } } return removed; } @Override public int indexOf(Object o) { return list.indexOf(o); } @Override public int lastIndexOf(Object o) { return list.lastIndexOf(o); } @Override public ListIterator<T> listIterator() { return new SyncedListIterator<>(list.listIterator(), entityChangeListener); } @Override public ListIterator<T> listIterator(int index) { return new SyncedListIterator<>(list.listIterator(index), entityChangeListener); } @Override public List<T> subList(int fromIndex, int toIndex) { return list.subList(fromIndex, toIndex); } /** * 内部实体变更监听器 * 监听属性变化并触发同步操作 */ private static class EntityChangeListener<T extends SynchronizableEntity> implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { @SuppressWarnings("unchecked") T entity = (T) evt.getSource(); // 只同步已修改的实体 if (entity.getState() == SynchronizableEntity.SyncState.MODIFIED) { entity.sync(null); } } } /** * 增强的Iterator实现 * 移除元素时自动注销监听器 */ private static class SyncedIterator<T extends SynchronizableEntity> implements Iterator<T> { private final Iterator<T> iterator; private final EntityChangeListener<T> listener; private T current; public SyncedIterator(Iterator<T> iterator, EntityChangeListener<T> listener) { this.iterator = iterator; this.listener = listener; } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { current = iterator.next(); return current; } @Override public void remove() { if (current != null) { current.removePropertyChangeListener(listener); } iterator.remove(); } } /** * 增强的ListIterator实现 * 支持添加/设置元素时的监听器管理 */ private static class SyncedListIterator<T extends SynchronizableEntity> implements ListIterator<T> { private final ListIterator<T> iterator; private final EntityChangeListener<T> listener; private T lastReturned; public SyncedListIterator(ListIterator<T> iterator, EntityChangeListener<T> listener) { this.iterator = iterator; this.listener = listener; } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { lastReturned = iterator.next(); return lastReturned; } @Override public boolean hasPrevious() { return iterator.hasPrevious(); } @Override public T previous() { lastReturned = iterator.previous(); return lastReturned; } @Override public int nextIndex() { return iterator.nextIndex(); } @Override public int previousIndex() { return iterator.previousIndex(); } @Override public void remove() { if (lastReturned != null) { lastReturned.removePropertyChangeListener(listener); } iterator.remove(); } @Override public void set(T e) { if (lastReturned != null) { lastReturned.removePropertyChangeListener(listener); } if (e != null) { e.addPropertyChangeListener(listener); } iterator.set(e); lastReturned = e; } @Override public void add(T e) { if (e != null) { e.addPropertyChangeListener(listener); } iterator.add(e); } } }
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值