create priority ordering for instances

This commit is contained in:
Eduard Heimbuch
2020-01-20 15:17:59 +01:00
parent e2007d9e64
commit af866f2ae8
2 changed files with 54 additions and 2 deletions

View File

@@ -71,12 +71,25 @@ public final class Priorities
*
* @return sorted class list
*/
public static <T> List<Class<? extends T>> sort(
Iterable<Class<? extends T>> unordered)
public static <T> List<Class<? extends T>> sort(Iterable<Class<? extends T>> unordered)
{
return new PriorityOrdering<T>().sortedCopy(unordered);
}
/**
* Returns a list of instances sorted by priority.
*
* @param <T> type of class
* @param unordered unordered instances
*
* @return sorted instance list
*/
public static <T> List<T> sortInstances(Iterable<T> unordered)
{
return new PriorityInstanceOrdering<T>().sortedCopy(unordered);
}
//~--- get methods ----------------------------------------------------------
/**
@@ -125,4 +138,28 @@ public final class Priorities
return Ints.compare(getPriority(left), getPriority(right));
}
}
/**
* {@link Ordering} which orders instances by priority.
*
* @param <T> type of instance
*/
public static class PriorityInstanceOrdering<T> extends Ordering<T>
{
/**
* Compares the left instance with the right instance.
*
*
* @param left left instance
* @param right right instance
*
* @return compare value
*/
@Override
public int compare(T left, T right)
{
return Ints.compare(getPriority(left.getClass()), getPriority(right.getClass()));
}
}
}

View File

@@ -98,6 +98,21 @@ public class PrioritiesTest
assertThat(cls, contains(B.class, C.class, A.class, D.class));
}
@Test
@SuppressWarnings("unchecked")
public void shouldSortInstances()
{
A a = new A();
B b = new B();
C c = new C();
D d = new D();
List<?> instances = ImmutableList.of(a, b, c, d);
instances = Priorities.sortInstances(instances);
assertThat(instances, contains(b, c, a, d));
}
//~--- inner classes --------------------------------------------------------
/**