java: 对于sort(int[],(o1,o2)->o2 - o1), 找不到合适的方法 方法 java.util.Arrays.<T>sort(T[],java.util.Comparator<? super T>)不适用 (推论变量 T 具有不兼容的限制范围 等式约束条件: int 上限: java.lang.Object) 方法 java.util.Arrays.<T>sort(T[],int,int,java.util.Comparator<? super T>)不适用 (无法推断类型变量 T (实际参数列表和形式参数列表长度不同))
时间: 2024-03-22 22:37:34 浏览: 343
这个错误提示表明使用lambda表达式时,编译器无法推断出泛型类型参数T的具体类型,需要显式指定泛型类型参数,示例代码如下:
```
int[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr, (Integer o1, Integer o2) -> o2 - o1);
System.out.println(Arrays.toString(arr)); // 输出 [9, 8, 5, 2, 1]
```
以上代码中,显式指定了泛型类型参数为Integer,即`(Integer o1, Integer o2) -> o2 - o1`,表示o2大于o1时返回正数,o2等于o1时返回0,o2小于o1时返回负数,实现降序排列。
相关问题
,请逐句详细解释这段代码是什么意思 //按照id排序 Comparator<Employee> c = new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { // TODO Auto-generated method stub return o1.getId() - o2.getId(); } }; Comparator<Employee> c1 = (o1,o2) ->o1.getId() - o2.getId(); Collections.sort(empList, (o1,o2) ->o1.getId() - o2.getId()); empList.forEach(s ->{ System.out.println(s); });
这段代码的作用是对一个名为empList的Employee对象列表进行按照ID进行排序。首先定义了一个名为c的比较器对象,重写了compare函数,使其按照Employee对象的ID属性进行比较,然后将这个比较器对象传入Collections类的sort方法中进行排序。而后面的c1对象以及empList.forEach()方法则是使用了Java 8引入的Lambda表达式,将比较器对象的具体实现直接传入sort方法和forEach方法中,达到简化代码的目的。最终结果是将empList中的Employee对象按照ID从小到大进行排序,然后依次输出到控制台。
Collections.sort(historyBeans,(o1,o2)-> (int) (o2.getDay_time()-o1.getDay_time()));
这段代码使用了 Java 8 的 Lambda 表达式,对一个 List<HistoryBean> 类型的集合进行排序。排序的依据是 HistoryBean 对象的 day_time 属性,按照从大到小的顺序进行排序。
Lambda 表达式的语法为 (o1, o2) -> (int) (o2.getDay_time() - o1.getDay_time()),其中 (o1, o2) 表示接收两个参数 o1 和 o2,-> 符号表示 Lambda 表达式的主体部分,即排序的比较逻辑,(int) (o2.getDay_time() - o1.getDay_time()) 表示将两个 HistoryBean 对象的 day_time 属性做差,并将结果转换为 int 类型。这个结果将作为 Collections.sort() 方法的返回值,用于判断两个对象的大小关系,从而实现排序功能。
阅读全文