Java 是否有比较标准<;列表<;T>&燃气轮机;或比较器<;收藏<;T>>;?
我正在搜索一个实现以下之一的类Java 是否有比较标准<;列表<;T>&燃气轮机;或比较器<;收藏<;T>>;?,java,collections,guava,apache-commons-collection,Java,Collections,Guava,Apache Commons Collection,我正在搜索一个实现以下之一的类 java.util.Comparator<int[]> java.util.Comparator<List<T>> java.util.Comparator<Collection<T>> java.util.Comparator java.util.Comparator java.util.Comparator 为什么Java标准库/Apache Common/Google Guava中没有这样的类?
java.util.Comparator<int[]>
java.util.Comparator<List<T>>
java.util.Comparator<Collection<T>>
java.util.Comparator
java.util.Comparator
java.util.Comparator
为什么Java标准库/Apache Common/Google Guava中没有这样的类?Apache Commons Collections有一个可能就是您所要寻找的类 但实现词典比较器也不难:
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;
}
};
}
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类词典比较测试
{
公共静态void main(字符串[]args)
{
List lists=新建ArrayList();
添加(Arrays.asList(“A”、“B”、“4”));
添加(Arrays.asList(“A”、“B”、“1”));
添加(Arrays.asList(“A”、“B”、“3”));
添加(Arrays.asList(“A”、“B”、“2”));
添加(Arrays.asList(“A”、“A”、“9”));
添加(Arrays.asList(“A”、“C”、“0”));
比较器c=可比比较器();
比较器cc=CreateCompator(c);
集合。排序(列表,cc);
用于(列表:列表)
{
系统输出打印项次(列表);
}
}
专用静态比较器comparableComparator()
{
返回新的比较器()
{
@凌驾
公共整数比较(t0,t1)
{
返回t0.compareTo(t1);
}
};
}
公共静态比较器CreateCompator(
最终比较器(比较器)
{
返回新的比较器()
{
@凌驾
公共整数比较(列表0、列表1)
{
int n=Math.min(list0.size(),list1.size());
对于(int i=0;iGuava的类提供了Iterable
s的字典顺序,它使用一个基顺序来比较每对元素
Ordering<T> elementOrdering = ...
Ordering<Iterable<T>> lexicographical = elementOrdering.lexicographical();
Ordering=。。。
Ordering lexicographical=elementOrdering.lexicographical();
因为没有一种比较集合的标准方法(按长度,按第一个元素的丑陋程度?)就像比较数字一样。我想你是在问是否有一个方便的类提供了一个集合的名称。为此,你需要一个Comparator
,或者你必须提供一个Comparator
。这就像问哪个汉堡最好,有没有办法比较汉堡(不同的食品杂志会有不同的汉堡比较)@webuster有一种比较字符串的标准方法,比较集合应该有相同的方法behavior@Morad您可以将其类比为字符串,这是有意义的,但我的意思是,有些集合没有顺序/继承关系(想想设置s)字符串的方式。我认为您需要的是@Raedwald建议的。您还需要根据列表的长度(“a”<“aa”)(下面推荐的Guava的排序。字典()
,有这方面的代码,所以如果您使用它,您会很好。)