【问题标题】:ArrayList with empty fileds具有空字段的 ArrayList
【发布时间】:2017-10-14 02:00:14
【问题描述】:

我在处理带有空字段的 Arraylist 时遇到问题。

作为输入,我有一个 Excel 列表中的值,并且有些单元格是空的(显示示例)。

 Column A  Column B  Column C  Column D 

 Val1      Val2      Val3      Val4 

 Bla1      Bla2      Bla3 

 Hug1      Hug2      Hug3      Hug4 

...

到目前为止,这些值都在一个 Arraylist 中。现在我有一个 Switch Case,我现在选择使用 D 列。现在的问题是我不能处理空字段。这些必须删除或跳过,因为我的输出没有空值。 当我尝试这样做时,我得到了一个空指针异常。

这里有一些代码:

private Arraylist<ExcelReader> el;

private void doSomething() {

   switch (chooseColumn) {

   // ArrayList is loaded
   //…
   case “D”: 
       // here I want to remove the null fields
       for (int c = 0; c <= el.size(); c++) {
          if(el.get(c).getColumnD().isEmpty()) {
          el.remove(c);
          }
       }
   break;
   // …

}

我在将它写回文件时尝试过,但得到了空指针异常。 我的错误在哪里?我做错了什么?

【问题讨论】:

  • 当然,如果你有null 值,el.get(c).getColumnD().isEmpty()) 将是一个问题。如果你get(c)返回null,你可以在那里检查。
  • 是的值为空
  • 如果 el.get(c) 是返回 null 的那个,您可以查看重复项以找到非常好的解决方案。如果没有,这将需要一些改进或条件来过滤那些而不将其从列表中删除

标签: java arraylist


【解决方案1】:
private Arraylist<ExcelReader> el;

private void doSomething() {

switch (chooseColumn) {

// ArrayList is loaded
//…
case “D”: 
   // here use removeAll to remove all null object
   el.removeAll(Collections.singleton(null));  
   for (int c = 0; c <= el.size(); c++) {
      if(el.get(c).getColumnD().isEmpty()) {
      el.remove(c);
      }
   }
break;
// …

}

【讨论】:

  • 由于这是来自我发布的副本,您至少可以添加答案的来源。没有来源和一些改进,这里不接受抄袭。另外,您忘记添加解释了。
  • 现在我得到了 java.lang.reflect.InvocationTargetException
  • 请分享异常堆栈跟踪
【解决方案2】:

您应该了解 isEmpty() 不会检查空值。它只检查 size==0 与否。 所以为了检查空值,你应该检查条件 getColumnD() != null

【讨论】:

  • 我必须连续清空字段,第一个将被删除,第二个显示出来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
相关资源
最近更新 更多