“线程中的异常”;“主要”;java.lang.UnsupportedOperationException

“线程中的异常”;“主要”;java.lang.UnsupportedOperationException,java,db4o,nativequery,Java,Db4o,Nativequery,我正在尝试使用Java中的本机查询获取车辆的有序列表 我使用两种方法,第一种是获取车辆,第二种是订购列表 我得到这个错误: Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.set(AbstractList.java:132) at java.util.AbstractList$ListItr.set(AbstractList.java:426)

我正在尝试使用Java中的本机查询获取车辆的有序列表

我使用两种方法,第一种是获取车辆,第二种是订购列表

我得到这个错误:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.set(AbstractList.java:132)
    at java.util.AbstractList$ListItr.set(AbstractList.java:426)
    at java.util.Collections.sort(Collections.java:159)
    at Exercici4.AzizElamraniOrdreMatricula(Exercici4.java:246)
    at Exercici4.main(Exercici4.java:45)
这是我的密码:

private static final String BBDDFITXER = "fitxer";

public static void main(String[] args) 
{
    new File(BBDDFITXER).delete();
    ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), BBDDFITXER);

    try {
        Cotxe c3 = new Cotxe("B1432-hk", 10000, true);
        Cotxe c1 = new Cotxe("B54w2-hk", 566666, true);
        Cotxe c2 = new Cotxe("Bwc345-ABC", 13456, true);
        Cotxe c4 = new Cotxe("Ba432th", 10000, true);
        Moto m1 = new Moto("B5756474", 1000, 500);
        Moto m2 = new Moto("6575-YT", 2345454, 250);

        db.store(c3);
        db.store(c1);
        db.store(c2);
        db.store(c4);
        db.store(m1);
        db.store(m2);   

        List<Vehicle> vehicles = AzizElamraniOrdreMatricula(db);
        consultaVehicles(vehicles);

    }finally{
        db.close();
    }
}

public static List<Vehicle> AzizElamraniNQ3(ObjectContainer db) 
{
    List<Vehicle> vehicles = db.query(new Predicate<Vehicle>() 
    {
     public boolean match(Vehicle vehicle) {
        return vehicle.getKm() < 50000
                && vehicle.getMatricula().startsWith("B");
         }
    });
    return vehicles;
}

 public static void consultaVehicles(List<Vehicle> vehicles) {
     System.out.println("total: " + vehicles.size());
     for (Vehicle v : vehicles) {
        System.out.println(v.infoVehicle());
     }
 }

 public static List<Vehicle> AzizElamraniOrdreMatricula(ObjectContainer db) {

     List<Vehicle> vehiclesdes = AzizElamraniNQ3(db);
     Collections.sort(vehiclesdes);

     return vehiclesdes;
 }
private静态最终字符串BBDDFITXER=“fitxer”;
公共静态void main(字符串[]args)
{
新文件(BBDDFITXER.delete();
ObjectContainer db=Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),BBDDFITXER);
试一试{
Cotxe c3=新Cotxe(“B1432 hk”,10000,真);
Cotxe c1=新Cotxe(“B54w2 hk”,566666,真);
Cotxe c2=新Cotxe(“Bwc345 ABC”,13456,真);
Cotxe c4=新的Cotxe(“BA432”,10000,真);
Moto m1=新Moto(“B5756474”,1000500);
Moto m2=新Moto(“6575-YT”,2345454250);
数据库存储(c3);
数据库存储(c1);
数据库存储(c2);
数据库存储(c4);
db.存储(m1);
db.仓库(m2);
列表车辆=AzizElamraniOrdreMatricula(db);
咨询车辆(车辆);
}最后{
db.close();
}
}
公共静态列表AzizElamraniNQ3(ObjectContainer数据库)
{
List vehicles=db.query(新谓词()
{
公共布尔匹配(车辆){
返回车辆。getKm()<50000
&&vehicle.getMatricula().startsWith(“B”);
}
});
返回车辆;
}
公共车辆(列出车辆){
System.out.println(“总计:+vehicles.size());
用于(车辆v:车辆){
System.out.println(v.infoVehicle());
}
}
公共静态列表AzizElamraniOrdreMatricula(ObjectContainer db){
列出车辆DES=AzizElamraniNQ3(db);
收集.分类(车辆DES);
返回车辆DES;
}

我做错了什么?

您从
db.query
获得的列表不是可修改的列表,而
集合。sort
修改列表以使其排序。要解决这个问题,您可以创建一个新列表并对其进行排序。您的方法
AzizElamraniOrdreMatricula
将如下所示:

public static List<Vehicle> AzizElamraniOrdreMatricula(ObjectContainer db) {
    List<Vehicle> vehiclesdes = new ArrayList<Vehicle>(AzizElamraniNQ3(db));
    Collections.sort(vehiclesdes);

    return vehiclesdes;
}
公共静态列表AzizElamraniOrdreMatricula(ObjectContainer db){
列表车辆DES=新阵列列表(AzizElamraniNQ3(db));
收集.分类(车辆DES);
返回车辆DES;
}

是,这是正确的
db。query
正在返回固定列表。请参见下面的示例,它将抛出java.lang.UnsupportedOperationException:

public class UnsupportedExceptionDemo {

public static void main(String[] args) {

String[] valStrings = { "Java", "Unsupported", "Test" };

List<String> list = Arrays.asList(valStrings);

for (Iterator<String> iterator = list.iterator(); 
        iterator.hasNext();) {
    String string = iterator.next();
    iterator.remove();
}

}

}
公共类不支持DeceptionDemo{
公共静态void main(字符串[]args){
字符串[]valStrings={“Java”,“Unsupported”,“Test”};
List=Arrays.asList(valStrings);
for(Iterator Iterator=list.Iterator();
迭代器.hasNext();){
String字符串=迭代器.next();
iterator.remove();
}
}
}

原因:当调用Arrays.asList(String…a)方法时,它返回由指定数组支持的固定大小列表,因此当您尝试修改列表(即添加或删除列表中的值)时,将抛出UnsupportedOperationException。要解决此问题,请使用LinkedList发布stacktrace。并尝试格式化代码/问题。欢迎使用。请阅读和,以获取撰写好问题的提示。您忽略了最重要的细节,即引发异常的语句的完整stacktrace和标识。除非你提供这些信息,否则没有人能帮上忙。我打赌这与
集合有关。排序
和你的数据库,但是。。。更多细节!很抱歉我编辑了这个问题!非常感谢。