我正在搜索一个实现以下内容之一的类
java.util.Comparator<int[]>
java.util.Comparator<List<T>>
java.util.Comparator<Collection<T>>为什么在/ApacheCommon/ Google中没有这样的类?
发布于 2014-08-28 14:34:37
番石榴的Ordering类提供了Iterable的字典顺序,它使用一个基本的Ordering来比较每一对元素。
Ordering<T> elementOrdering = ...
Ordering<Iterable<T>> lexicographical = elementOrdering.lexicographical();发布于 2014-08-28 12:43:44
有一个ComparatorChain,它可能是您要寻找的。
但是,实现词典编纂比较器也不是那么难:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class LexicographicalComparatorsTest
{
public static void main(String[] args)
{
List<List<String>> lists = new ArrayList<List<String>>();
lists.add(Arrays.asList("A", "B", "4"));
lists.add(Arrays.asList("A", "B", "1"));
lists.add(Arrays.asList("A", "B", "3"));
lists.add(Arrays.asList("A", "B", "2"));
lists.add(Arrays.asList("A", "A", "9"));
lists.add(Arrays.asList("A", "C", "0"));
Comparator<String> c = comparableComparator();
Comparator<List<String>> cc = createCompatator(c);
Collections.sort(lists, cc);
for (List<String> list : lists)
{
System.out.println(list);
}
}
private static <T extends Comparable<T>> Comparator<T> comparableComparator()
{
return new Comparator<T>()
{
@Override
public int compare(T t0, T t1)
{
return t0.compareTo(t1);
}
};
}
public static <T> Comparator<List<T>> createCompatator(
final Comparator<T> comparator)
{
return new Comparator<List<T>>()
{
@Override
public int compare(List<T> list0, List<T> list1)
{
int n = Math.min(list0.size(), list1.size());
for (int i=0; i<n; i++)
{
T t0 = list0.get(i);
T t1 = list1.get(i);
int result = comparator.compare(t0, t1);
if (result != 0)
{
return result;
}
}
return 0;
}
};
}
}通过倒转列表遍历方向,可以实现字典比较器。
本例中的比较器也可以推广到Comparator<Collection<T>>,方法是使用手动遍历和从集合中获得的两个Iterator<T>实例。
https://stackoverflow.com/questions/25548594
复制相似问题