我正在用Enthuware的模拟html" target="_blank">测试学习1z0-809 : Java SE 8程序员II。
遇到这个问题。
List<Integer> ls = Arrays.asList(3,4,6,9,2,5,7);
System.out.println(ls.stream().reduce(Integer.MIN_VALUE, (a, b)->a>b?a:b)); //1
System.out.println(ls.stream().max(Integer::max).get()); //2
System.out.println(ls.stream().max(Integer::compare).get()); //3
System.out.println(ls.stream().max((a, b)->a>b?a:b)); //4
上面哪个语句会打印9?
答案是
1和3
但是还有别的东西。我不明白为什么
System.out.println(ls.stream().max(Integer::max).get()); // PRINTS 3
我试图使用peek
调试它,但这并不能帮助我理解。
我尝试使用< code>Integer::max和< code>Integer::compare对< code>ls进行排序
ls.sort(Integer::max); // [3, 4, 6, 9, 2, 5, 7]
ls.sort(Integer::compare); // [2, 3, 4, 5, 6, 7, 9]
当然,我知道< code>Integer::max不是一个比较器,因此它的签名也是1。对我来说,< code>max在第一种情况下应该是< code>7,因为它是最后一个元素,就像我用< code>Integer::compare排序时一样
有人可以把它分解成简单的东西吗?
比较器方法的契约(在参数<code>第一,<code>第二)是:
first
等于第二
首先返回负值
只有正值的
max
方法将始终返回正值。根据比较器合约解释返回值时,正值意味着首先
你需要更换
.max(Integer::max)
跟
.max(Integer::compare)
这里的问题是,抽象方法比较
被声明为返回一个int
值,并且该值也由整数的签名满足.max
以及 Integer.compare
方法在 Integer
类中,因此表示 Integer::max
被推断为有效的比较器
。尽管预计会实现比较方法,如下所示:
当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数。
在您当前的场景中,代码最终总是返回一个正值(给定输入),因此比较中的第一个元素总是被认为更大,因此相应地返回。
整数。max(a,b)
将返回给定a
和b
。如果以某种方式将该结果用作比较器,则返回的正值将被视为意味着<code>a
前两个元素是3和4。两者都是正的。Integer.max(3,4)=4
我有以下代码: 为什么它会打印Java流?
问题内容: 给定以下示例: 输出为: 为什么? 问题答案: 这是因为前导零的整数文字是八进制整数(以8为底):
我试图调试HALF\u甚至i java的舍入问题,正如您在下面看到的,意外的结果是377.35,我们可以预期它会打印377.34? 有人能解释一下这种行为吗?
问题内容: 给定一个变量,该变量包含巴黎时区的日期时间2000-01-01 00:01(冬季afaik中为UTC + 2): 我希望转换为UTC会导致日期时间为1999-12-31 22:01,但是却得到了: 我想念什么? 谢谢 问题答案: 不幸的是 ,在许多时区使用标准构造函数的参数“不起作用” 。 但是对于没有夏令时转换的时区来说是安全的,例如UTC: 您会注意到: “ LMT + 0:09:
我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?
max 获得数据表中,值最大的max($table, $column, $where) table [string] 表名. column [string] 查询的字段列. where (optional) [array] WHERE 条件.max($table, $join, $column, $where) table [string] 表名. join [array] 多表查询. colum