【问题标题】:Sorting 2D Arraylist of Object对对象的二维数组列表进行排序
【发布时间】:2018-03-08 06:40:46
【问题描述】:

我有对象的 2D Arralist,我想在包含 LocalDate 的第一列对其进行排序

我使用此代码对其进行排序

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy");
    formatter = formatter.withLocale( Locale.US );

ArrayList<ArrayList<Object>> cusKashf = new ArrayList<ArrayList<Object>>();

cusKashf.addAll(new ReadBillDeateals().readSell(textField_4.getText()));
Collections.sort(cusKashf , new Comparator<ArrayList<Object>>() {
      @Override
      public int compare(ArrayList<Object> entry1, ArrayList<Object> entry2) {
             return ((LocalDate.parse(entry1.get(0).toString(), formatter)).compareTo((LocalDate.parse(entry2.get(0).toString(), formatter))));
            }
        });

问题是这段代码异常,我想知道我的代码哪里出错了

这是异常报告

java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at reports.Kashf$7$1.compare(Kashf.java:327)
    at reports.Kashf$7$1.compare(Kashf.java:1)
    at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
    at java.util.TimSort.sort(Unknown Source)
    at java.util.Arrays.sort(Unknown Source)
    at java.util.ArrayList.sort(Unknown Source)
    at java.util.Collections.sort(Unknown Source)
    at reports.Kashf$7.actionPerformed(Kashf.java:324)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(Unknown Source)
    at javax.swing.SwingUtilities.notifyAction(Unknown Source)
    at javax.swing.JComponent.processKeyBinding(Unknown Source)
    at javax.swing.JComponent.processKeyBindings(Unknown Source)
    at javax.swing.JComponent.processKeyEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)

【问题讨论】:

  • 请提供您的问题的可编译示例。该错误表示您要的是空列表的第 2 项,但您的代码似乎没有这样做。您的代码似乎在请求列表的第 0 项(可能为空)。
  • 例外很明显:列表为空。确保涉及的列表不为空
  • 是的,没错,感谢您的帮助

标签: java sorting object arraylist localdate


【解决方案1】:

在您的 cusKashf 列表中检查子列表是否不为空。

@Override
  public int compare(ArrayList<Object> entry1, ArrayList<Object> entry2) {
     if(Objects.isNull(entry1) || entry1.isEmpty())  return -1;
     if(Objects.isNull(entry2) || entry2.isEmpty())  return -1;

     return ((LocalDate.parse(entry1.get(0).toString(), formatter)).compareTo((LocalDate.parse(entry2.get(0).toString(), formatter))));
  }

【讨论】:

    【解决方案2】:

    您尝试比较的列表之一是空的,请尝试用 try 和 catch 包围,或者在获取第 0 项之前检查列表是否为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2015-09-17
      • 2022-01-02
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多