使用Java中的for循环将元素从一个列表传输到另一个列表

时间:2019-02-19 18:03:25

标签: java list for-loop

尝试使用for循环将一个字符串列表的元素传输到临时列表。

List<String> origin = Arrays.asList("foo", "bar", "var");
        List<String> temp = Arrays.asList();

        String a = null;

        for(int i = 0; i < origin.size(); i++) {
            //Want to format before adding to temp list
            a = doSomeFormatting(origin.get(i));
            temp.add(a);
        }

继续收到错误:线程中的异常

"main" java.lang.UnsupportedOperationException
    at java.base/java.util.AbstractList.add(AbstractList.java:153)
    at java.base/java.util.AbstractList.add(AbstractList.java:111)
    at test/test.Test.main(Test.java:13)

如果在某些情况下我想对列表中的字符串运行某种格式并将其转移到临时列表中,这是否不可能?

2 个答案:

答案 0 :(得分:2)

Arrays.asList()返回一个不可变的列表。您应该改用一些可变列表实现,例如ArrayList

List<String> temp = new ArrayList();

答案 1 :(得分:2)

Arrays.asList返回一个不可变的列表,因此添加时为UnsupportedOperationExceptionHere's是Javadoc,这就是它的意思:

  

返回由指定数组支持的固定大小列表。 (更改为   返回的列表“直写”到数组。)此方法用作   结合使用基于数组的API和基于集合的API   与Collection.toArray()一起使用。返回的列表是可序列化的,并且   实现RandomAccess。

对于您的情况,您实际上可以在没有任何循环的情况下执行以下操作(即通过使用构造函数):

List<String> temp = new ArrayList(origin);

更新

如果要格式化,则可以迭代并应用该格式,例如:

List<String> temp = new ArrayList<>();
for(String element : origin) {
    String formattedElement = format(element);
    temp.add(formattedElement);
}

这是Java 8方式:

List<String> temp = origin.stream()
    .map(e -> format(e))
    .collect(Collectors.toList());