我写了一些简单的代码,如下所示。此类运行良好,没有任何错误。
public class Test {
public static void main(String[] args) {
List<Integer> intList = IntStream.of(1,2,3,4,5,6,7,8,9,10).boxed().collect(Collectors.toList());
int value = intList.stream().max(Integer::compareTo).get();
//int value = intList.stream().max(<Comparator<? super T> comparator type should pass here>).get();
System.out.println("value :"+value);
}
}
如代码注释所示,该max()
方法应传递type参数Comparator<? super Integer>
。
但是Integer::compareTo
实现Comparable
接口- 不是 Comparator
。
public final class Integer extends Number implements Comparable<Integer> {
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
}
这怎么工作?该max()
方法说它需要一个Comparator
参数,但是可以与Comparable
参数一起使用。
我知道我误解了一些东西,但是现在我知道了。有人可以解释一下吗?
int value = intList.stream().max(Integer::compareTo).get();
上面的代码片段在逻辑上等效于以下内容:
int value = intList.stream().max((a, b) -> a.compareTo(b)).get();
从逻辑上讲,这也等效于以下内容:
int value = intList.stream().max(new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a.compareTo(b);
}
}).get();
Comparator
是一个功能接口,可以用作lambda或方法引用,这就是为什么代码可以成功编译和执行的原因。
我建议阅读有关方法参考的Oracle教程(它们使用一个比较两个对象的示例)以及第15.13节中的Java语言规范。方法参考表达式以了解其工作原理。
我知道我误解了一些事情,但我现在知道是什么了。谁能解释一下吗?
我想使返回数据类型的的函数与传入的参数的数据类型相同。例如,我会这样调用函数: 因为我将一个传递给,所以它返回了一个
问题内容: 从本文看来,它们都具有相同的大小容量:http : //msdn.microsoft.com/zh- cn/library/ms143432.aspx 这是真的吗?真正的区别是什么? 我只是从oracle(clob)迁移了一些数据,并将其制作为varchar(max),但无论如何它似乎都截断了一些值,我应该改用TEXT吗? 谢谢! 问题答案: 不,您不应使用。首先,自SQL Serve
我正在用Java构建一个库管理应用程序。 我有一个名为 的抽象类。它有一个称为 的抽象方法。 有一个名为< code>Newspaper的子类,它当然实现了< code>equals,其签名与< code>equals在< code>Material中的签名完全相同: Java无法解析< code > elementoacomparer 的任何方法。它们都存在于< code >报纸中,该报纸确实扩
本文向大家介绍Python函数参数类型*、**的区别,包括了Python函数参数类型*、**的区别的使用技巧和注意事项,需要的朋友参考一下 刚开始学习python,python相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来说理解起来比较轻松。只是函数部分参数的"*"与"**",闭包
MariaDB 函数用于检索表达式的最大值。 语法: 数据准备 在数据库中创建一个表,并插入一些数据。参考以下创建语句 - 1. MAX()函数与单表达式 示例: 查询表的最低分数。参考以下查询语句 - 执行上面查询语句,得到以下结果 - 2. MAX()函数与GROUP BY子句 可以使用函数的子句来分组。 再插入一条重复的数据 - 当前数据库中的记录如下 - 示例: 执行上面查询语句,得到以下