Skip to content

Instantly share code, notes, and snippets.

View pellse's full-sized avatar

Sebastien Pelletier pellse

View GitHub Profile
List<Item> itemsToReorder = getGlobalList(); // get data from the database
List<Long> newOrder = getUserPreferenceOrder(); // stored in the same database of a different data storage
...
List<Item> reorderedList = new ArrayList<>();
for (Long id : newOrder) {
for (Item item : itemsToReorder) {
if (item.getId().equals(id)) {
reorderedList.add(item);
break;
}
public static List<Item> reorderItems(List<Item> itemsToReorder, List<Long> newOrder) {
List<Item> reorderedList = new ArrayList<>();
if (isEmpty(itemsToReorder) || isEmpty(newOrder)) {
return itemsToReorder != null ? itemsToReorder : reorderedList;
}
Map<Long, Item> itemMap = new HashMap<>();
for (Item item : itemsToReorder) {
if (item != null) {
public static List<Item> reorderItems(List<Item> itemsToReorder, List<Long> newOrder) {
List<Item> reorderedList = new ArrayList<>();
if (isEmpty(itemsToReorder) || isEmpty(newOrder)) {
return itemsToReorder != null ? itemsToReorder : reorderedList;
}
Map<Long, Item> itemMap = new LinkedHashMap<>();
for (Item item : itemsToReorder) {
if (item != null) {
public interface Mapper<T, R> {
R map(T param);
}
public static <E, T> List<E> reorderList(List<E> itemsToReorder, List<T> order, Mapper<E, T> mapper) {
List<E> reorderedList = new ArrayList<>();
if (isEmpty(itemsToReorder) || isEmpty(order)) {
return itemsToReorder != null ? itemsToReorder : reorderedList;
}
List<Item> itemsToReorder = getGlobalList();
List<Long> newOrder = getUserPreferenceOrder();
List<Item> reorderedList = reorderList(itemsToReorder, newOrder, new Mapper<Item, Long>() {
@Override
public Long map(Item item) {
return item.getId();
}
});
interface Factory<T> {
T create();
}
public static <E, T, C extends Collection<E>> C reorderCollection(C itemsToReorder,
Collection<T> order,
Mapper<E, T> mapper,
Factory<C> collectionFactory) {
C newCollection = collectionFactory.create();
Set<Item> setToReorder = getSetToReorder();
List<Long> newOrder = getNewOrder();
Set<Item> reorderedSet = reorderCollection(setToReorder,
newOrder,
new Mapper<Item, Long>() {
@Override
public Long map(Item item) {
return item.getId();
}
Set<Item> setToReorder = getSetToReorder();
List<Long> newOrder = getNewOrder();
Set<Item> reorderedSet = reorderCollection(setToReorder, newOrder, Item::getId, HashSet::new);
public static <E, T, C extends Collection<E>> C reorderCollection(C collectionToReorder,
Collection<? extends T> newOrder,
Function<? super E, ? extends T> mapper,
Supplier<? extends C> collectionSupplier) {
if (Stream.of(newOrder, collectionToReorder).anyMatch(Collections::isEmpty)) {
return emptyIfNull(collectionToReorder, collectionSupplier);
}
Map<T, E> collectionItemMap = collectionToReorder.stream()
public static <E, T> List<E> orderList(List<E> listToReorder, Collection<? extends T> newOrder, Function<? super E, ? extends T> mapper) {
return reorderCollection(listToReorder, newOrder, mapper, ArrayList::new);
}
public static <E, T> Set<E> orderSet(Set<E> setToReorder, Collection<? extends T> newOrder, Function<? super E, ? extends T> mapper) {
return reorderCollection(setToReorder, newOrder, mapper, HashSet::new);
}