当前位置: 首页 > 知识库问答 >
问题:

流.max(整数::最大): 意外结果 [重复]

邓声
2023-03-14

我正在用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排序时一样

有人可以把它分解成简单的东西吗?

共有3个答案

孔山
2023-03-14
匿名用户

比较器方法的契约(在参数<code>第一,<code>第二)是:

  • 如果first等于第二
  • ,则返回0
  • 如果首先返回负值

只有正值的max方法将始终返回正值。根据比较器合约解释返回值时,正值意味着首先

申屠喜
2023-03-14

你需要更换

.max(Integer::max)

.max(Integer::compare)

这里的问题是,抽象方法比较被声明为返回一个int值,并且该值也由整数的签名满足.max以及 Integer.compare 方法在 Integer 类中,因此表示 Integer::max 被推断为有效的比较器。尽管预计会实现比较方法,如下所示:

当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数。

在您当前的场景中,代码最终总是返回一个正值(给定输入),因此比较中的第一个元素总是被认为更大,因此相应地返回。

海景曜
2023-03-14

整数。max(a,b)将返回给定ab。如果以某种方式将该结果用作比较器,则返回的正值将被视为意味着<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