注意:这个问题源于一个死链接,这是以前的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类的静态方法.
那么,为什么要编译呢?
我正在学习1z0-809:Java SE 8 Programmer II使用Enthuware的模拟测试.
遇到这个问题.
Run Code Online (Sandbox Code Playgroud)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
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
有人可以把它分解成简单的东西吗?