将文件读入具有不同数据类型的多维arraylist?

时间:2016-04-02 20:32:37

标签: java android arrays arraylist multidimensional-array

我正在编写我的第一个Android应用程序,所以我是一个新手,对于将文件中的数据转换为数组的最佳方式感到困惑。我正在尝试从资源原始txt文件中获取数据并将其存储在数组或ArrayList中,以便我可以执行excel样式的vlookup。数据文件(data_file.txt)的大小为28,2,第一列有一个int,第二列有一个浮点,通过这样的空格分隔:

  • 500 -1.3
  • 1000 -1.6
  • 10000 -1.7

我希望能够查找1000的值并获得-1.6。 首先,我应该使用多维对象数组还是ArrayList,我使用哪一个很重要?我需要保持第二列数据类型为float,并且如果可能的话,希望保持第一列数据类型为int。

我正在寻找有关代码和/或我需要研究的方法的提示。

干杯,

Airfix膨胀

4月3日更新

我很确定地图不是我想要的。我一直在研究下面的代码。看起来除了Scanner scan = new Scanner(new FileReader(file));我得到一个“无法解析文件变量的构造函数FileReader(int)之外它会起作用。显然它将我的文件视为一个int,当它确实只是一个普通的txt文件时在示例中显示。仍在寻找帮助以完成。谢谢:))

public void fuelIndex (){


    Object file = (getResources().getIdentifier("fuel_index",
                "raw", getPackageName()));
    Scanner scan = new Scanner(new FileReader(file));


    Object[][] fuelIndexData = new String[28][2];


    int i = 0;
    while(scan.hasNextLine()){
        fuelIndexData[i] = scan.nextLine().split("\\s+");
        i++;
    }
    //loops through the file and splits on any space

    for (int row = 0; row < fuelIndexData.length; row++) {
        for (int col = 0; col < fuelIndexData[0].length; col++) {
            if(fuelIndexData[row][col] != null){
                System.out.print(fuelIndexData[row][col] + " " );
            }
        }
        if(fuelIndexData[row][0] != null){
            System.out.print("\n");
        }
    }

}

2 个答案:

答案 0 :(得分:1)

这似乎是Map而非List的用例。注意:在Java中有两种浮点数据类型。您提到要将值存储为float,但我假设您只是意味着将使用浮点表示存储数据。所以,我假设我们在这里与Double合作。 可以使用MapInteger键映射到Double值,就像使用map.get(1000)获取值1.6一样。

以下是一些要演示的代码:

    Map<Integer,Double> map = new HashMap<>();
    map.put(1000, 1.6);
    map.put(500,  1.3);
    map.put(10000, 1.7);

    System.out.println(map.get(10000));
    System.out.println(map.get(99));

这会产生以下输出:

1.7
null
在第一次调用中返回了

1.7,因为它是10000键的值。在第二次调用中返回null,因为99不在keySet中。 JavaDoc for the Map interface有更多详细信息。

答案 1 :(得分:1)

如果整数是唯一的并且用于标识浮点值,则应使用HashMap,如果要按列表中的位置建立索引并且允许整数值具有重复项,则可以使用{ {3}}使用一些存储两个值的对象ContainerObject

<强> HashMap中

Map<Integer, Float> myMap = new HashMap<Integer, Float>();
myMap.put(500, -1.3f);
myMap.put(1000, -1.6f);
myMap.put(10000, -1.7f);

<强>的ArrayList

List<ContainerObject> myList = new ArrayList<ContainerObject>();
myList.add(new ContainerObject(500, -1.3f));
myList.add(new ContainerObject(1000, -1.6f));
myList.add(new ContainerObject(1000, -1.7f));