相关疑难解决方法(0)

Java 8流的.min()和.max():为什么要编译?

注意:这个问题源于一个死链接,这是以前的SO问题,但是这里......

看到这个代码(注意:我不知道,这个代码将不能"工作",而Integer::compare应使用-我只是提取它从链接的问题):

final ArrayList <Integer> list 
    = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());

System.out.println(list.stream().max(Integer::max).get());
System.out.println(list.stream().min(Integer::min).get());
Run Code Online (Sandbox Code Playgroud)

据javadoc的.min().max(),两者的参数应该是一个Comparator.然而,这里的方法引用是Integer类的静态方法.

那么,为什么要编译呢?

java java-8 java-stream

213
推荐指数
3
解决办法
14万
查看次数

Stream.max(Integer :: max):意外的结果

我正在学习1z0-809:Java SE 8 Programmer II使用Enthuware的模拟测试.

遇到这个问题.

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   
Run Code Online (Sandbox Code Playgroud)

以上哪个陈述将打印9?

答案是

1和3

但还有别的东西.我不明白为什么

System.out.println(ls.stream().max(Integer::max).get()); // PRINTS 3
Run Code Online (Sandbox Code Playgroud)

我尝试使用peek它进行调试,但它无法帮助我理解.

我尝试ls使用Integer::max和排序Integer::compare

ls.sort(Integer::max);     // [3, 4, 6, 9, 2, 5, 7]
ls.sort(Integer::compare); // [2, 3, 4, 5, 6, 7, 9]
Run Code Online (Sandbox Code Playgroud)

当然,我得到的事实Integer::max不是比较器,因此它具有相同的签名.对我来说,max应该是7第一种情况,因为它是我排序时的最后一个元素Ìnteger::compare

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

java compare max java-8 java-stream

8
推荐指数
4
解决办法
617
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

compare ×1

max ×1