我在线程“main”中得到一个异常java.lang.UnsupportedOperationException

2exbekwf  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(133)

环境详细信息我正在运行我的程序:
Java version“17.0.7”2023-04-18 LTS Java(TM)SE Runtime Environment(build 17.0.7+8-LTS-224)Java HotSpot(TM)64位服务器VM(build 17.0.7+8-LTS-224,混合模式,共享)
项目:

public class Conversions {

    public static void main(String[] args) {
        
        List<Integer> lIn = new ArrayList<>();
        lIn.add(4);
        lIn.add(56);
        lIn.add(423);
        lIn.add(2516);
        lIn.add(924);
        lIn.add(5611);

        //ArrayList to Array
        int[] conArray = lIn.stream().mapToInt(i -> i).toArray();
        
        
        // Array to ArrayList
        
        int[] arr = {5,8,9,34,63,119};
        List<Integer> convList = Arrays.stream(arr).boxed().toList();
        System.out.println(convList);    //30   
                                         //31
        Collections.sort(convList);      //32
        Collections.reverse(convList);   //33

    }

}

字符串
错误代码:
在java.base/java.util. ImmutableCollections.java:142处java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)处java.base/java.util. ImmutableCollections.java:261处java.base/java.util.Collections.sort(Collections.java:145)处com.example.DependencyInjection.Conversions.main**(Conversions.java:32)线程“main”中出现异常
我试图理解为什么编译器抛出UnsupportedOperationException,即使我正确地使用了Collections.sort()方法。我所做的就是传递一个列表,但我仍然得到了一个异常。

cgvd09ve

cgvd09ve1#

.toList()Stream的方法)返回的列表是不可变的。排序它(.sort())排序'in place',这需要改变列表。你不能这么做。
通常的解决方法是首先将不可变列表复制到一个可变列表中:convList = new ArrayList<Integer>(convList);的值。
但是,您的所有代码都有点可疑。为什么要从int[]List<Integer>再到Stream,然后再回来?
编辑:让我们只保留“我想从一个到另一个”的写法--而不是先列出一个列表,然后再尝试对列表进行排序,而是在流“运行”时对其进行排序:

List<Integer> convList = Arrays.stream(arr)
  .sorted()  // Add this!
  .boxed()
  .toArray();

字符串

1tuwyuhd

1tuwyuhd2#

替换此行

List<Integer> convList = Arrays.stream(arr).boxed().toList();

字符串

List<Integer> convList = new ArrayList<>(Arrays.stream(arr).boxed().toList());


它将创建一个新的可变列表,该列表将被进一步排序

Collections.sort(convList);


没有任何问题。
希望这对你有帮助

相关问题