-1

我有对象的 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)
4

2 回答 2

0

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

于 2017-09-26T22:31:28.390 回答
0

在您的 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))));
  }
于 2017-09-26T22:41:12.977 回答