我一直在尝试将输入流中的字符串存储到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"))));
显示错误:
- 参数列表的非法修饰符,仅允许最终
- 类型安全:类型List的表达式需要未经检查的转换以符合List
醇>
请告诉我哪里错了?
答案 0 :(得分:0)
如果您在方法static
内部使用并且public
类型不允许用于局部变量删除类型
这样做
List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));
答案 1 :(得分:0)
我们来看看。首先,关键字静态和公开只能应用于类字段(如果讨论数据而不是方法),而不能应用于局部变量。
关于最终关键字,可以说几句话。在Java中有两种类型:基元(int,float,double等)和引用。如果将final关键字应用于基本类型变量,它实际上可以保护它不被更改。
对于参考类型,它更复杂。 E.g:
final List<String> list = new ArrayList<>();
您无法更改列表变量(这是对实际列表的引用),但您可以修改列表本身。如果要保护列表不被修改,可以使用 unmodifiableList 方法:
final List<String> list = Collections.unmodifiableList(new ArrayList<>());
答案 2 :(得分:0)
在Collections.unmodifiableList
中,您可以直接传递Arrays.asList
,因为它会为您提供一个列表。
无需再次使用ArrayList
实例包装。
此外,还没有对新创建的列表进行引用。
你可以这样做:
List<String> list = Collections.unmodifiableList(Arrays.asList(str.split("\n")));
按Arrays.asList
,您无法添加或删除元素。
通过不可修改的列表,您无法使用内部列表中的setter方法添加,删除或修改
答案 3 :(得分:0)
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
}
}
}