我需要像Java中的DataTable

时间:2011-08-09 09:54:01

标签: java data-structures

我环顾四周,但似乎找不到任何我想要的东西。

我需要读取包含列标题的CSV文件,例如:

NAME;AGE;HEIGHT
dan;36;180
john;31;181
ben;30;190

我可以将哪个对象解析为read,然后我可以像这样引用它:

object.name = (string) someSortOfDataStructure["NAME"];
object.name = (int) someSortOfDataStructure["AGE"];

object.name = someSortOfDataStructure.getColumn("NAME");

在C#中,我可以使用像DataTable / DataRow这样的东西。

3 个答案:

答案 0 :(得分:4)

想想OOP。您需要使用属性Personnameage创建height类。

public class Person {

  private String name;
  private String age;
  private String height;

  // Getter and setter methods...
}

接下来,使用BufferedReader逐行读取CSV文件。对于您希望使用line.split(";");拆分该行的每一行,为您提供包含令牌的String[]

对于该行,您现在可以从令牌创建Person;

Person person = new Person();
person.setName(tokens[0]);
person.setAge(tokens[1]);
person.setHeight(tokens[2]);

请注意,假设列的位置。如果您要删除此假设,则需要Map标题到某个位置。

String headerLine = "NAME;AGE;HEIGHT";
String[] headers = headerLine.split(";");
Map<String,Integer> map = new HashMap<String,Integer>();
for (int i=0; i<headers.length; i++) {
  map.put(headers[i], i);
}

然后,您可以按名称获取列的位置;

Person person = new Person();
person.setName(tokens[map.get("NAME")]);
person.setAge(tokens[map.get("AGE")]);
person.setHeight(tokens[map.get("HEIGHT")]);

Table类型类是反模式。当程序员无法用对象思考时,它们往往会出现。我经常在遗留的Java应用程序中看到Table类,并且它是一个真正的PITA来使用它们。不要这样做。

答案 1 :(得分:0)

好的......你可以使用默认的表格模型。这是为了支持秋千表,我不确定它是否能够帮助你。 http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/table/DefaultTableModel.html

答案 2 :(得分:0)

Guava library有一个Table界面,应该是你需要的界面。