【问题标题】:Create for element of a CSV a List in Java在 Java 中为 CSV 的元素创建一个列表
【发布时间】:2017-07-10 10:55:37
【问题描述】:

我有一个关于 csv 和 java 的问题。 我有一个包含大量数据的 csv 文件。例如,有三个不同的 id,每个 id 大约有 5k 个数据点。

csv 如下所示: ID, Data1(String), Data2(Long), Data3(Float), Data4(Float), Data5(Float)

我读取 csv 并将每一列存储到另一个链表中,因此对于永远链表,索引 i 是一行。

我想做的是让每个 ID 都有一个数据列表。

到目前为止,我已经这样做了:

LinkedList<String> new_id = new LinkedList();
LinkedList<String> new_data1 = new LinkedList();
LinkedList<String> new_data2 = new LinkedList();
....
....

for(int i = 0; i < id.size(); i++){
    if(id.get(i).equals(String theidiwant){
        new_id.add(id.get(i));
        new_data1.add(data1.get(i));
        ....
        ....
}

所以我的问题是,是否有一个简单的解决方案可以为每个 id 创建这些数据的列表。

我希望你明白我想问什么。 抱歉,描述太复杂了。

干杯!

【问题讨论】:

标签: java csv linked-list


【解决方案1】:

您应该首先为行创建一个类,并拥有一个代表一行的对象,例如

public class Row{
    public String id;
    public String data1;
    public long data2;
    public float data3;
    public float data4;
    public float data5;

    public Row(String id, String data1, long data2, float data3, float data4, float data5) {
        //Enter constructor here e.g. this.id = id...
    }
}

然后您可以将对象过滤到列表中

... after parsing the data into List<Row> data;

List<Row> filteredList = data.stream().filter(
    row -> row.id.equals(String theidiwant))
    .collect(Collectors.toCollection(LinkedList::new));

如果你想要每个 id 一个列表,你可以像 SpaceCowboy 所说的那样创建一个带有列表的地图

Map<String, List<Row>> mappedValues = new HashMap<>();
for(Row row : data) {
    if(mappedValues.containsKey(row.id) {
        List<Row> values = mappedValues.get(row.id)
        values.add(row)
    }
    else {
        List<Row> newValues = new ArrayList<>();
        newValues.add(row)
        mappedValues.put(row.id, newValues);
    }
}

【讨论】:

    【解决方案2】:

    我不确定你为什么要创建列列表,行列表更有意义。虽然,使用 java 类来映射列并创建行列表将是最合适的。

    【讨论】:

      【解决方案3】:

      您可能想尝试使用地图。

      Map<Integer, List<String>> myMap = new HashMap<Integer, List<String>>();
      
      LinkedList<String> data = new LinkedList<>();
      
      myMap.put([your_key],data);
      

      然后您可以使用 id 访问列表,如下所示:

      if (myMap.containsKey([your_key])) {
          List<String> list = myMap.get([your_key]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        相关资源
        最近更新 更多