了解Collections.max中的比较器

时间:2017-12-11 12:58:50

标签: java collections comparator

有人可以解释以下代码行的含义吗?我很难理解比较器部分。我尝试使用谷歌搜索,但所有这些对我来说都是压倒性的。请尽可能简单地解释

List<String> dateStrings = regexTool.getMatches(AppConstants.REGEX_DATETIME, doc.getRawText());
    if (!dateStrings.isEmpty()) {
        String maxLengthString = Collections.max(dateStrings, Comparator.comparing(s -> s.length()));}

2 个答案:

答案 0 :(得分:2)

max方法返回被视为&#34;最大&#34;的元素。在集合中。

在这种情况下,您有一组字符串。默认情况下,字符串按字母顺序进行比较按字母顺序排序字符串时,顶部的字符串被视为具有较小值的字符串,而底部的字符串则被视为具有较大值的字符串。

然而,在您的问题中编写代码的人不希望以这种方式比较字符串。他/她希望按长度比较字符串。所以一个更长的字符串意味着更大的&#34;字符串。

您可以将第二个参数传递给max,指定您希望如何比较字符串。由于您希望按长度比较它们,因此您传入:

Comparator.comparing(s -> s.length())

您可能会发现一些有用的有用信息:

答案 1 :(得分:0)

如果你打电话:

String max = Collections.max(dateStrings);

您将使用字符串的自然顺序获取集合中的最大字符串。换句话说,它将是字典顺序中最大的 。因此,如果列表包含&#34; aa&#34;,&#34; bb&#34;,zz&#34;,&#34; cc&#34;,则max将是&#34; zz&#34;。< / p>

您的示例想要检索列表中最长的字符串。因此,您需要提供一个自定义比较器,根据它们的长度比较字符串。