如果我使用Arrays.asList()
创建一个列表,则保证该列表按插入顺序分配。我想以此方式轻松定义类顶部比较器的排序顺序:
List<String> sortedKeyOrder = Arrays.asList("x", "y", "z");
是否有一种简单的方法可以将该列表的插入顺序转换为比较器的恒定时间查找表?
答案 0 :(得分:1)
您可以创建一个返回libopenblas
的静态方法,该方法由这样的地图支持:
Comparator
这将打印public static <T> Comparator<T> lookupComparator(Iterable<T> order) {
int index = 0;
final Map<T, Integer> orderMap = new HashMap<T, Integer>();
for (T t : order) {
orderMap.put(t, index++);
}
return new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
Objects.requireNonNull(o1);
Objects.requireNonNull(o2);
if (o1 == o2) {
return 0;
}
return orderMap.get(o1).compareTo(orderMap.get(o2));
}
};
}
@Test
public void testLookupComparator() {
Comparator<String> lc = lookupComparator(Arrays.asList("c", "a", "b", "z", "m", "g"));
List<String> someValues = Arrays.asList("a", "b", "c", "g", "m", "z");
someValues.sort(lc);
System.out.println(someValues);
}
。但是,如果任一值是[c, a, b, z, m, g]
,或者地图中没有该值,它将引发异常。