如何将对象列表转换并转换为整数列表?

How to convert and cast an object list to an integer list?

波纹管代码片段错误:

 "Type mismatch: cannot convert from element type Object to Integer".

public static List<Integer> quickSort(List<Integer> arr) {
    if(arr.size() == 1) {
        return arr;
    }
    int mid = arr.size() / 2;
    List left =  Arrays.asList(arr).subList(0, mid);
    List right =  Arrays.asList(arr).subList(mid, arr.size());
    Collections.sort(left);
    Collections.sort(right);
    for (Integer x : left) {
        right.add(x);
    }
    return arr;
}

老实说,我真的不知道从哪里开始。

首先:无论您在这里做什么,这都不是我所说的 Quicksort - 因此方法名称已经具有误导性。但是,由于您 return 无论如何都返回了源列表并且没有处理它的引用,所以您让整个函数一开始就毫无用处。

您的错误是因为 Java 中的列表是参数化的 - 这意味着它们需要知道它们将包含的条目的数据类型。由于 Java 中的所有内容都是 Object 的子类,因此列表的“默认”类型是 Object。这就是数据类型旁边的 <> 的用途:定义列表的类型。

因此,对于您的示例:List<Integer> left,依此类推至少会修复错误,但不会修复您的错误功能。使用 Collections.sort 时,您实际上可以直接在 List 上执行它,无需编写自己的函数来包装它。

存在逻辑错误,Arrays.asList(arr) 实际上创建了一个列表的列表 List<List<Integer>>,而看起来您想要的是一个 arr 已经是一个的列表..

您还需要将 List leftList right 正确参数化为 List<Integer> 否则它会被视为默认类型 Object.

public static List<Integer> quickSort(List<Integer> arr) {
    if(arr.size() == 1) {
        return arr;
    }
    int mid = arr.size() / 2;
    List<Integer> left =  arr.subList(0, mid);
    List<Integer> right =  arr.subList(mid, arr.size());
    Collections.sort(left);
    Collections.sort(right);
    for (Integer x : left) {
        right.add(x);
    }
    return arr;
}

编辑:在 return 语句中 returning arr 意味着你的函数什么都不做,因为它只是吐出未经编辑的输入。