Univocity解析器 - 生成scala案例类的迭代器方式

时间:2016-09-11 22:12:06

标签: java scala univocity

使用Univocity框架来执行自定义解析要求。我们有一个迭代器通过调用parseNext()将每一行输出为事件,我们不想使用"解析(文件文件)"

我们将此Scala案例类作为最终输出,但目前我们正在处理解析器的输出并使用工厂类来创建scala案例类。

是否存在从univocity生成case类对象的迭代器方法(我确实找到了BeanListProcessor但是它不适用于迭代器方式)?

答案可以是Java或Scala ..

谢谢, [R

  def parseRecord(field: Array[String], univocityContext: Option[ParsingContext]): Option[lineEvent] = {

        val parsingContext = univocityContext.get
        val parsedEvent = new ParsedEventConstructor()

      for ((index, counter) <- parsingContext.extractedFieldIndexes().zipWithIndex){

        val columnHeader  = parsingContext.headers()(index)

        columnHeader match {

          case "header1" => {
            parsedEvent.parsedheader1 += field(counter)
          }
          case "header2" => {
            parsedEvent.parsedheader2 += field(counter)
          }
          case _ => parsedEvent.parsedOtherValues += field(counter)
        }
      }

    Some(parsedEvent.getParsedEvent())
  }

1 个答案:

答案 0 :(得分:1)

uniVocity-parsers有一个BeanProcessor(名称中没有&#34; List&#34;),它会将每个已解析的bean提交给&#34; beanProcessed&#34;你需要实现的回调方法。 BeanListProcessor只是一个便利类,它扩展BeanProcessor以将每个对象添加到列表中,它不是获取对象的唯一方法。

您还可以使用CsvRoutines对象及其iterate方法迭代bean而不使用上面提到的回调。检查this example