环境详细信息我正在运行我的程序:
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()
方法。我所做的就是传递一个列表,但我仍然得到了一个异常。
2条答案
按热度按时间cgvd09ve1#
.toList()
(Stream
的方法)返回的列表是不可变的。排序它(.sort()
)排序'in place',这需要改变列表。你不能这么做。通常的解决方法是首先将不可变列表复制到一个可变列表中:
convList = new ArrayList<Integer>(convList);
的值。但是,您的所有代码都有点可疑。为什么要从
int[]
到List<Integer>
再到Stream
,然后再回来?编辑:让我们只保留“我想从一个到另一个”的写法--而不是先列出一个列表,然后再尝试对列表进行排序,而是在流“运行”时对其进行排序:
字符串
1tuwyuhd2#
替换此行
字符串
与
型
它将创建一个新的可变列表,该列表将被进一步排序
型
没有任何问题。
希望这对你有帮助