[英]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"))));
它显示错误:
- 参数列表的非法修饰符,仅允许使用final
- 类型安全:List类型的表达式需要未经检查的转换才能符合List
请告诉我我哪里错了?
如果在方法内部使用,则局部变量不允许使用static
和public
类型。
像这样
List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));
让我们来看看。 首先,关键字static和public只能应用于类字段(如果谈论数据而不是方法),而不能应用于局部变量。
关于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.