解释这个比较器?

时间:2015-03-03 21:36:06

标签: java comparator

我知道int maxLength会返回列表中最长字的长度,但我认为return arg0.length() - arg1.length();应返回-1 01之类的内容。那么这些值如何在最后设置为.length()

 int maxLength = Collections.max(lst, new Comparator<String>() { //get length of longest word using Collections.max comparator
            @Override
            public int compare(String arg0, String arg1) {
                return arg0.length() - arg1.length();
            }
        }).length();

3 个答案:

答案 0 :(得分:2)

arg0.length() - arg1.length()

将返回一个整数,表示arg0与arg1的比较,如果为0,则在此逻辑比较中两者相等,如果是-x则arg1大于arg1,如果是x,则arg0大于x比arg1

  

你能解释一下.length()部分吗?如何将1设置为.length()。 - 刚才FatFockFrank

这句话类似于

String longestString = Collections.max(lst, new Comparator<String>() { //get length of longest word using Collections.max comparator
            @Override
            public int compare(String arg0, String arg1) {
                return arg0.length() - arg1.length();
            }
        });

int maxLength = longestString.length();

答案 1 :(得分:1)

return arg0.length() - arg1.length();

如果arg0较长则返回postive,如果长度相等则返回0,如果arg1较长则返回negative。返回值无论是正数还是负数(或零)都无关紧要,因此忽略超出该值的实际值。例如,返回值-50被视为-1。

答案 2 :(得分:1)

比较器提供了比较两个元素的方法。

来自API

  

public static T max(Collection coll,Comparator comp)
  根据指定比较器引发的顺序返回给定集合的最大元素。集合中的所有元素必须通过指定的比较器相互比较(即comp.compare(e1,e2)不得为集合中的任何元素e1和e2抛出ClassCastException。)

导致字符串(lst中字符串长度最长)和Collections.max(...).length()的字符串将返回其长度。