繁体   English   中英

从输入流创建字符串的只读数组列表

[英]Creating an read only arraylist of string from inputstream

我一直试图存储从输入流到arraylist的字符串。

首先我已经使用以下方式将inputStream转换为字符串

IOUtils.copy(inputStream , str);
str.toString();

然后我试图将此字符串存储为arraylist为:

public static final List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));

它显示错误:

  1. 参数列表的非法修饰符,仅允许使用final
  2. 类型安全:List类型的表达式需要未经检查的转换才能符合List

请告诉我我哪里错了?

如果在方法内部使用,则局部变量不允许使用staticpublic类型。

像这样

 List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));

让我们来看看。 首先,关键字staticpublic只能应用于类字段(如果谈论数据而不是方法),而不能应用于局部变量。

关于final关键字,有几句话要说。 在Java中,有两种类型:基元(int,float,double等)和引用。 如果将final关键字应用于原始类型的变量,则实际上可以防止其被更改。

对于引用类型,则更为复杂。 例如:

final List<String> list = new ArrayList<>();

您不能更改列表变量(它是对实际列表的引用),但是可以修改列表本身。 如果要防止列表被修改,请使用unmodifiableList方法:

final List<String> list = Collections.unmodifiableList(new ArrayList<>());

Collections.unmodifiableList您可以直接传递Arrays.asList ,因为它会给您一个列表。 无需再次包装ArrayList实例。

另外,还没有引用到新创建的列表。

您可以这样:

List<String> list = Collections.unmodifiableList(Arrays.asList(str.split("\n")));

通过Arrays.asList您不能添加或删除元素。

通过不可修改的列表,您不能使用内部列表中的设置方法添加,删除或修改

package com.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        InputStream in = new FileInputStream(new File("/home/ikuser/testing.txt"));// Give Path Of the file
        List<String> list = new ArrayList<String>(); // Initialize List
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder out = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
            list.add(line); // Add Line in the list
        }
        reader.close();
        for(String l : list){
            System.out.println(l); //list print
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM