如何使用simpleflatmapper将CSV行收集为字符串数组

时间:2017-10-16 04:48:38

标签: java arrays csv java-stream

我正在尝试使用simpleflatmapper收集CSV行作为字符串数组:

try (Reader in = Files.newBufferedReader("path")) {
    return org.simpleflatmapper.csv.CsvParser
//  .mapTo(String[].class)
    .stream(in)
//  .parallel()
//  .flatMap(Arrays::stream)
    .map(line -> {return new ArrayList<>(Arrays.asList(line));})
//  .map(Arrays::asList)
    .collect(Collectors.toList());
} catch (Exception e) {
    e.printStackTrace();
}

在我调试时,lineString[]但是值是整行(一个元素)而不是许多字符串(许多单元格)。我如何获得细胞阵列?

CSV文件没有特别之处。例如:
    a \ t b \ t 1 \ t 2
    x \ t y \ t 3 \ t 4

我在此代码.map(line -> {return new ArrayList<>(Arrays.asList(line));})中看到的问题是line包含一个字符串值,即整行(带制表符,空格,...)而不是许多字符串(每个字符串是每个细胞的价值)。

我想要的整个结果是List<List<String>>(行列表)。每行为List<String>(单元格列表)。当前结果是行(行)列表,每行/每行是整个字符串。

2 个答案:

答案 0 :(得分:0)

由于该文件是CSV,因此您不需要使用任何外部库,因此只需在读取此类文件时读取该文件

Just try to implement this

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="vertical">

<ScrollView
  android:layout_width="match_parent"
  android:layout_height="match_parent"

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:baselineAligned="false"
android:orientation="horizontal"
android:weightSum="4">
<LinearLayout
  android:layout_width="0dp"
  android:layout_height="match_parent"
  android:layout_weight="1.1"
  android:gravity="center"
  android:orientation="vertical">

  <TextView
    android:id="@+id/tvAuditStartDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="@string/to" />

  <TextView
    android:id="@+id/tvAuditEndDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
  android:layout_width="0dp"
  android:layout_height="match_parent"
  android:layout_weight="1.2"
  android:gravity="center"
  android:orientation="vertical">

  <TextView
    android:id="@+id/tvAuditDepartmentName"
    style="@style/TextviewPrimaryMedium"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:gravity="center"
    android:lines="1" />

  <TextView
    android:id="@+id/tvSubItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:gravity="center" />

</LinearLayout>

<FrameLayout
  android:layout_width="0dp"
  android:layout_height="match_parent"
  android:layout_weight="1.2">

  <TextView
    android:id="@+id/tvAuditSubmitDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />
</FrameLayout>

<FrameLayout
  android:layout_width="0dp"
  android:layout_height="match_parent"
  android:layout_weight="0.5">

  <CheckBox
    android:id="@+id/chkbAuditStatus"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_gravity="center"
    android:background="@drawable/check_box"
    android:button="@android:color/transparent"
    android:clickable="false"
    android:gravity="end" />
</FrameLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" />

 </LinearLayout>

  </ScrollView>
  </LinearLayout>

答案 1 :(得分:0)

我找到了解决方案:

return org.simpleflatmapper.csv.CsvParser
                    .separator('\t')    //<-- solution
                    .stream(in)
                    .map(Arrays::asList)
                    .collect(Collectors.toList());

全部谢谢!