Java方法返回List和一个整数

时间:2011-07-11 02:20:04

标签: java

我有一个方法,它读取文件并在String数组列表中返回文本文件的内容。找到该方法的实现以及我如何阅读它。现在我想要在文件中包含行数。我可以在评论中看到如下所示 - 你能告诉我如何从方法中传递整数变量并读取整数?

下面 - 即读取文件应返回由字符串数组和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();

8 个答案:

答案 0 :(得分:3)

在这种情况下,文件中的行数与usersArray1中的条目数相对应,您可以将其设为usersArray1.size()

答案 1 :(得分:1)

嗯,你不能。 Java只能返回1个对象。

你可以创建一个封装对象来保存列表和int,或者你可以使你使用的列表无类型并在开头或结尾添加int,或者只是获取int的字符串值和在开头或结尾添加它,稍后再解析。

编辑:你知道吗?您正在尝试获取包含列表长度的int。您不必这样做:列表已经知道它们有多大,您可以使用size()检索它。

答案 2 :(得分:1)

您不能返回也包含整数的String列表。有几件事可以解决这个问题:

  1. 重新定义您的方法以获取List<String>参数;该方法填充列表并返回一个int。
  2. 在调用代码中,只需使用size()的{​​{1}}方法来确定方法返回后的条目数。
  3. 定义一个包含Listint字段的类,并返回该字段而不仅仅是List<String>
  4. List<String>数组作为初始化为单个元素的参数传递。将整数返回值存储在数组的第0位。 (调用方法时,要求数组至少为1长。)
  5. 人们可能会想出其他技术。

答案 3 :(得分:1)

对于这个特例,最简单的答案是Mark Elliott,他似乎是唯一一个阅读readFile()正在做什么的人。返回的行数为usersArray1.size()

另一个小问题。 (在此重复您的使用示例以供参考)

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

第一行是不必要地创建ArrayList<String[]>的实例,它将在第二行执行后准备好进行GC。然后,usersArray1引用将引用在readFile()方法的第一行上创建的对象,不会引用引用usersArray1声明和初始化时创建的对象。

答案 4 :(得分:0)

创建一个bean。

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

}

稍后您的readFile只需返回此resultBean类。

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;
}

答案 5 :(得分:0)

int通过值传递,默认情况下不在java中引用。一个简单的方法是创建一个小类。尝试像

这样的东西
public class Data
{
    public List<String[]> usersArray1;
    public int value;
}

你可以简单地将它传递给你的方法并将string []的List存储在那里,int也可以进入。希望这有帮助!

答案 6 :(得分:0)

每当您需要返回多个数据时,您有两个选择,有时一起使用:

  1. 使用(如果需要,写入)包装要返回的数据的类(在本例中为List和整数)。
  2. 作为可以保存一些数据的参数传入,并且可以通过手边的方法进行修改。

答案 7 :(得分:0)

基本上有两种方法可以解决两件事:

  • 创建一个将两个事物保持在一起的类(如果整数和字符串列表在你的代码中传递很多,那么很有意义。)
  • 使用各种技巧通过参数返回一个(或两个),包括:
    • 将一个new int[1]变量传递给函数,然后在函数中更改该“数组”的内容,并在函数后从中读取。
    • 传入一个以可变方式封装整数的类(如AtomicInteger)。
    • List对象传递给函数并对其进行修改(同时保持相同的List引用)。