一、问题描述

今天碰到一个这样的问题,在spring data jpa 中查询获取了OrderInfo  list 对象,为了节约时间,在应用层对该列表进行排序

 

List<OrderInfo> orderlist0 = list.getContent();

orderlist0.sort(new Comparator<OrderInfo>() {
@Override public int compare(OrderInfo o1, OrderInfo o2) { return  o1.getId().compareTo(o2.getId()); }

});

结果出现了莫名其妙的错误

java lis.sort java.lang.UnsupportedOperationException

 

二、分析及解决方案

很明显发现该list 不支持 sort 方法,进一步分析,jpa 查询返回的对象本质上市List<Object[]> 类型,由于是List类型,所以不支持sort方法,因此需要对该数据进行改造

  //一定要转化一下 要不然排序会出错

// getconten 返回的数据是List转化来的,该方法不支持sort  造成 compare 方法无效

List<OrderInfo> orderlist0 = list.getContent();

List<OrderInfo> orderlist = new ArrayList<>();

for(OrderInfo o:orderlist0){

orderlist.add(o);

}

orderlist.sort(new Comparator<OrderInfo>() {
@Override public int compare(OrderInfo o1, OrderInfo o2) { return  o1.getId().compareTo(o2.getId()); }

});

完美解决

三、相关拓展

list 容器在ide中使用remove、add、sort等方法,不会报错,但是实际上该容器并不支持这些方法,我们需要特别注意

package com.imwinlion;
import java.util.Arrays;
import java.util.List;
public class UnSupportedTest {
public static void main(String[] args) {
Integer [] arr = new Integer[]{1,2,3,4,5,6,67,89,45};
List<Integer> list = Arrays.asList(arr);
System.out.println(“list”+list);
list.remove(1);//unsupported
list.add(4);//unsupported
System.out.println(“list”+list);
}
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注