package cn.mutils.core.sort; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.mutils.core.sort.comparator.CreationItemComparator; import cn.mutils.core.sort.comparator.FileLengthComparator; import cn.mutils.core.sort.comparator.FileModifiedComparator; import cn.mutils.core.sort.comparator.IndexItemComparator; import cn.mutils.core.sort.comparator.LastAccessItemComparator; import cn.mutils.core.sort.comparator.LastAccessItemEntryComparator; import cn.mutils.core.sort.comparator.ListSizeComparator; import cn.mutils.core.sort.comparator.PreSortedComparator; /** * Sort utility of framework */ @SuppressWarnings("unused") public class SortUtil { /** * Sort file list by last modified time */ public static List<File> sortByModified(List<File> list) { return sortByModified(list, Order.ASC); } /** * Sort file list by last modified time for order */ public static List<File> sortByModified(List<File> list, Order order) { FileModifiedComparator comparator = new FileModifiedComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } /** * Sort file list by file length */ public static List<File> sortByLength(List<File> list) { return sortByLength(list, Order.ASC); } /** * Sort file list by file length for order */ public static List<File> sortByLength(List<File> list, Order order) { FileLengthComparator comparator = new FileLengthComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } /** * Sort list by last access time */ public static <E extends ILastAccessItem> List<E> sortByLastAccess(List<E> list) { return sortByLastAccess(list, Order.ASC); } /** * Sort list by last access time for order */ public static <E extends ILastAccessItem> List<E> sortByLastAccess(List<E> list, Order order) { LastAccessItemComparator comparator = new LastAccessItemComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } /** * Sort list by creation time */ public static <E extends ICreationItem> List<E> sortByCreation(List<E> list) { return sortByCreation(list, Order.ASC); } /** * Sort list by creation time for order */ public static <E extends ICreationItem> List<E> sortByCreation(List<E> list, Order order) { CreationItemComparator comparator = new CreationItemComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } /** * Sort map by LRU algorithm */ public static <K, V extends ILastAccessItem> Map<K, V> sortByLru(Map<K, V> map) { return sortByLru(map, Integer.MAX_VALUE); } /** * Sort map by LRU algorithm for size */ public static <K, V extends ILastAccessItem> Map<K, V> sortByLru(Map<K, V> map, int lruSize) { List<Map.Entry<K, V>> entryList = new ArrayList<Map.Entry<K, V>>(map.entrySet()); LastAccessItemEntryComparator<K, V> comparator = new LastAccessItemEntryComparator<K, V>(); comparator.setOrder(Order.DESC); Collections.sort(entryList, comparator); HashMap<K, V> sortedMap = new HashMap<K, V>(); for (int i = 0, size = entryList.size(); i < size && i < lruSize; i++) { Map.Entry<K, V> entry = entryList.get(i); sortedMap.put(entry.getKey(), entry.getValue()); } entryList.clear(); return sortedMap; } /** * Sort list by presorted list */ public static <E> List<E> sortByPreSorted(List<E> list, List<?> preSorted) { return sortByPreSorted(list, preSorted, Order.ASC); } /** * Sort list by presorted list for order */ public static <E> List<E> sortByPreSorted(List<E> list, List<?> preSorted, Order order) { PreSortedComparator<E> comparator = new PreSortedComparator<E>(); comparator.setOrder(order); comparator.setPreSorted(preSorted); Collections.sort(list, comparator); comparator.clear(); return list; } /** * Sort list by index */ public static <E extends IIndexItem> List<E> sortByIndex(List<E> list) { return sortByIndex(list, Order.ASC); } /** * Sort list by index for order */ public static <E extends IIndexItem> List<E> sortByIndex(List<E> list, Order order) { IndexItemComparator comparator = new IndexItemComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } /** * Sort list by list item size */ public static <E> List<List<E>> sortByListSize(List<List<E>> list) { return sortByListSize(list, Order.ASC); } /** * Sort list list item size for order */ public static <E> List<List<E>> sortByListSize(List<List<E>> list, Order order) { ListSizeComparator comparator = new ListSizeComparator(); comparator.setOrder(order); Collections.sort(list, comparator); return list; } }