如何从protobuf中的UnmodifiableList中删除项目

时间:2016-09-27 10:08:35

标签: java list protocol-buffers proto

我有一个带有列表作为其成员之一的protobuf

我想替换此列表中的项目。

我尝试删除项i并在同一位置添加另一个i

List<Venues.Category> categoryList = builder.getCategoryList();

    categoryList.remove(i);

但是我收到了不支持的错误

java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableList.remove(Collections.java:1317)

如何进行更换?

4 个答案:

答案 0 :(得分:6)

我最终克隆了列表,修改了克隆列表并将其放入旧列表中。

gimp-image-reorder-item

答案 1 :(得分:2)

其中一个解决方案是创建一个新的可修改列表,它包装旧的 - 我的意思是将它传递给例如构造函数。新ArrayList()

List<T> modifiable = new ArrayList<T>(unmodifiable);

从现在开始,您应该能够删除和添加元素。

答案 2 :(得分:1)

如果你的List来自数组,它会抛出 java.lang.UnsupportedOperationException

/*Example*/
String[] strArray = {"a","b","c","d"};

List<String> strList = Arrays.asList(strArray);

strList.remove(0); // throw exception

因为原始数组和列表是链接的。

列表的大小为固定大小,更改将对两者产生影响。

无法完成

添加()删除()

答案 3 :(得分:0)

如果要更新protobuff构建器列表,可以使用以下方法实现:

      //Considering builder is your Category list builder.
    List<Venues.Category> categoryList = builder.getCategoryList(); // Previous list.

        builder.setCategory(1, categoryBuilder.build()); //categoryBuilder is your object builder which you want to replace at first location.
// Hope you will get setCategory function by protobuffer, or something like that. because it's created by protobuffer compilation.

        List<Venues.Category> updatedCategoryList = builder.getCategoryList();
    //Your updated list with new object replaced at 1.