忽略CSV文件中的无效对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了忽略CSV文件中的无效对象相关的知识,希望对你有一定的参考价值。
因此,我得到了一个.csv,可以在其上基于列进行迭代和创建对象。现在,在要生成的对象的构造函数中,我正在检查一些条件,如果不满足上述条件,则抛出Exception。
现在,我一直在问自己-假设该列表中有一些对象会引发Exception,是否有可能停止通过即将创建的对象的构造函数,并且只需转到.csv中的下一行并继续建立我的列表?
因此简而言之:
- 浏览.csv
- 基于列构建对象
- 如果无法创建对象(因为在构造函数中引发了异常),请忽略该对象并转到列表中的下一个元素
这可能吗?
谢谢!
我实际上找到了解决方案。我把这行代码放在try.catch-block中(使用return Object xyz)从.csv获取数据的位置-这样,程序就不会终止。但是,由于此行位于必须返回对象的函数中,因此我需要在try-catch-block之外返回一个对象,这就是为什么我返回null的原因。现在,我主目录中的列表中充满了有效的对象,但也充满了一些空对象。
然后,我通过使用.stream().map(SimpleCsvParser::parseLine).filter(p -> p != null).collect(Collectors.toList());
在填充列表的同时过滤掉所有空对象,从而从主列表中“删除”了空对象。
谢谢!
我需要在try-catch-block之外返回一个对象,这就是为什么我返回null的原因。
重新组织代码,以便您not总是必须返回一个新对象。捕获新对象创建失败的陷阱。如果抛出异常,则在添加到新对象的集合时跳过该特定循环。
让我们为演示创建Person
类。请注意如何在构造函数中,我们寻找有效数据,如果未收到,则抛出IllegalArgumentException
。这称为IllegalArgumentException
。
data-validation
以及一些假数据。我们希望第三行失败,名字为package work.basil.example;
import java.util.Objects;
public class Person
public String givenName, surname;
// -------| Constructors |------------
public Person ( String givenName , String surname )
if ( Objects.isNull( givenName ) || givenName.isEmpty() ) throw new IllegalArgumentException();
if ( Objects.isNull( surname ) || surname.isEmpty() ) throw new IllegalArgumentException();
this.givenName = givenName;
this.surname = surname;
// -------| Accessors |------------
// Read-only, no setters.
public String getGivenName ( )
return givenName;
public String getSurname ( )
return surname;
// -------| Object |-----------------
@Override
public boolean equals ( Object o )
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass() ) return false;
Person person = ( Person ) o;
return givenName.equals( person.givenName ) &&
surname.equals( person.surname );
@Override
public int hashCode ( )
return Objects.hash( givenName , surname );
@Override
public String toString ( )
return "Person " +
"givenName='" + givenName + '\'' +
" | surname='" + surname + '\'' +
" ";
,但姓氏字段为空。我们的Zero
类要求两个Person
对象都是非null和非空的。
String
使用String input =
"Alice,Anderson\r\n" + // Standard CSV requires CRLF as newline.
"Bob,Barker\r\n" +
"Zero,\r\n" +
"Carol,Carrington";
库来完成阅读输入的工作。
➥注意Apache Commons CSV和csvRecord.get
调用周围的内部try-catch。如果这些行失败,请向我们的new Person
我们跳过添加Person
对象。循环继续到CSV文件中的下一个输入。
在任何时候都不会尝试处理List
类型的null
对象。如果准备就绪时没有有效的Person
对象,则继续。
Person
运行时。
INFO导入在第3行上失败。异常:java.lang.IllegalArgumentException
人= [人namedName ='Alice'|姓=“安德森”,人物给定名字=“鲍勃” |姓=“巴克”,人物给定名字=“卡罗尔” |姓='卡灵顿']
以上是关于忽略CSV文件中的无效对象的主要内容,如果未能解决你的问题,请参考以下文章