[英]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.