This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
for (Long id : newOrder) { | |
if (id != null) { | |
for (Item item : itemsToReorder) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Set<Item> setToReorder = getSetToReorder(); | |
List<Long> newOrder = getNewOrder(); | |
Set<Item> reorderedSet = reorderCollection(setToReorder, newOrder, Item::getId, HashSet::new); |
OlderNewer