如何将int数组转换为SortedSet?现有代码报错求助
问题分析与解决方案
你的代码报错核心原因是:Arrays.asList()处理基本类型数组时,不会将数组中的每个int元素拆分成List的元素,而是把整个int[]数组作为单个元素存入List。当把这个List传给TreeSet时,TreeSet尝试对其中的int[]对象进行排序,但int[]并没有实现Comparable接口,因此抛出类型转换异常。
正确的实现方法
方法1:使用Java Stream(推荐,简洁高效)
int[] RatedMessage = {/* 你的int数组元素 */}; SortedSet<Integer> lst = Arrays.stream(RatedMessage) .boxed() .collect(Collectors.toCollection(TreeSet::new));
Arrays.stream(RatedMessage)将int数组转为IntStream.boxed()把每个int基本类型包装为Integer对象collect(Collectors.toCollection(TreeSet::new))直接将流中的元素收集为TreeSet(天然是SortedSet的实现类)
方法2:手动遍历数组添加元素
如果使用的Java版本低于8,可以手动遍历数组,逐个将元素加入TreeSet:
int[] RatedMessage = {/* 你的int数组元素 */}; SortedSet<Integer> lst = new TreeSet<>(); for (int num : RatedMessage) { lst.add(num); }
为什么原代码不行?
原代码new TreeSet(Arrays.asList(RatedMessage))中,Arrays.asList(RatedMessage)返回的是List<int[]>而不是List<Integer>,TreeSet内部排序时,会试图把int[]强转为Comparable,但数组类型并没有实现这个接口,因此触发ClassCastException。
内容的提问来源于stack exchange,提问作者mattsmith5
相关产品推荐
相关产品推荐

