簡體   English   中英

Java 方法返回 List 和 integer

[英]Java method returning List and a integer

我有一個讀取文件並在String數組列表中返回文本文件內容的方法。 在下面找到該方法的實現以及我如何閱讀它。 現在我也想知道文件中的行數。 我可以在下面的評論中得到它 - 你能告訴我如何從方法中傳遞 integer 變量並讀取 integer 嗎?

下面 - 即讀取文件應該返回由字符串 arrays 和一個 int 組成的List

public List<String[]> readFile() {
    final List<String[]> userList = new ArrayList<String[]>(); 
    BufferedReader bufferedreader = null;
    try {
        final String FileName="abs.txt"     
        bufferedreader = new BufferedReader(new FileReader(FileName));
        String line = null;
        while ((line = bufferedreader.readLine()) != null) {      
        // Add Variable ++ to get number of lines
            final String[] values = line.split(",");
            userList.add(values);   
        } 
    }
    catch (FileNotFoundException ex) {
        logError(ex.getMessage());
     }
    catch (IOException ex) {
        logError(ex.getMessage());
    }
    finally {
        try {
            if (bufferedreader != null){
                bufferedreader.close();
            }
         }
         catch (IOException ex) {
             logError(ex.getMessage());  
         }
     }
     return userList;
 }

我是這樣讀的:

 List<String[]> usersArray1 = new ArrayList<String[]>();
 usersArray1=complianceTracker.readFile();

在這種情況下,文件中的行數對應於usersArray1中的條目數,您可以將其作為usersArray1.size()獲得。

嗯,你不能。 Java只能返回1個object。

您可以制作一個封裝 object 來保存列表和 int,或者您可以使您使用的列表無類型並在開頭或結尾添加 int,或者只獲取 int 的字符串值並將其添加到開頭或結尾並稍后解析。

編輯:你知道嗎? 您正在嘗試獲取包含列表長度的 int 。 您不必這樣做:列表已經知道它們有多大,您可以使用size()檢索它。

您不能返回還包含 integer 的字符串列表。 有幾件事可以解決這個問題:

  1. 重新定義您的方法以獲取List<String>參數; 該方法填充列表並返回一個 int。
  2. 在調用代碼中,只需使用Listsize()方法確定該方法返回后的條目數即可。
  3. 定義一個包含intList<String>字段的 class ,並返回它而不僅僅是List<String>
  4. 傳遞一個int[]數組作為初始化為單個元素的參數。 將 integer 返回值存儲在數組的 position 0 中。 (要求調用方法時數組長度至少為 1。)

人們可能會想出其他技術。

對於這種特殊情況,最簡單的答案是來自 Mark Elliott 的答案,他似乎是唯一一個閱讀readFile()正在做什么的人。 返回的行數是usersArray1.size()

另一個小點。 (在此處重復您的使用示例以供參考)

 List<String[]> usersArray1 = new ArrayList<String[]>();
 usersArray1=complianceTracker.readFile();

第一行不必要地創建了一個ArrayList<String[]>的實例,該實例將在第二行執行后准備好進行 GC。 然后usersArray1引用將引用在readFile()方法的第一行創建的 object,而沒有引用在聲明和初始化 usersArray1 時創建的usersArray1引用。

創建一個豆子。

public class ResultBean
{
   private List<String> userArray;
   private Integer anotherResult;
   //create get set here

}

稍后你的 readFile 只需要返回這個 resultBean class。

public ResultBean readFile()
{
 ResultBean bean = new ResultBean();
 //your existing logic here.
 bean.setUserArray(new ArrayList<String>()); //please implement your own set here. This is just an example.
 bean.setAnotherResult(Integer.valueOf(0));
 return bean;
}

在 java 中,整數是按值傳遞而不是默認引用。 解決此問題的一種簡單方法是創建一個小型 class。 嘗試類似的東西

public class Data
{
    public List<String[]> usersArray1;
    public int value;
}

您可以簡單地將其傳遞給您的方法並將字符串 [] 列表存儲在其中,並且 int 也可以在其中存儲 go。 希望這可以幫助!

每當您需要返回多條數據時,您有兩種選擇,有時一起使用:

  1. 使用(如有必要,編寫)一個 class 包裝要返回的數據(在這種情況下,一個列表和一個整數)。
  2. 作為參數傳入,可以保存一些數據,並且可以通過手頭的方法進行修改。

返回兩個東西的問題基本上有兩種解決方案:

  • 創建一個 class 將這兩件事保持在一起(如果 integer 和字符串列表在您的代碼中傳遞很多,這很有意義)。
  • 使用各種技巧通過參數返回一個(或兩個),包括:
    • 將一個new int[1]變量傳遞給 function,然后更改 function 中該“數組”的內容,並在 ZC1C425268E68385D14AB5074C17Z9 之后讀取它。
    • 傳入一個 class ,它以可變的方式(如AtomicInteger )封裝 integer 。
    • List object 傳遞給 function 並對其進行修改(同時保持相同的List引用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM