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的
排序。字典()
,有这方面的代码,所以如果您使用它,您会很好。)