繁体   English   中英

根据特定的数组元素对数组进行排序

[英]Sort List of arrays according to specific array elements

我有一个数组List ,其中每个数组( array[4] )的第五个元素为Date类型,每个数组( array[3] )的第四个元素为String类型。 我正在尝试根据日期对List进行排序,然后对字符串进行排序。 我使用带有自定义Comparator Collections.sort()进行了尝试,但未成功:

 List <Object[]> execute(List <Object[]> resultList){   

            Collections.sort(resultList, new Comparator<Object[]>() {
                public int compare(Object[] array, Object[] otherArray) {
                    int dateComparison = array[4].compareTo(otherArray[4]);
                     return dateComparison == 0 ? array[3].compareTo(otherArray[3]) : dateComparison;
                }
            });

    return resultList;
    }

输入项

02.02.2017 10:00   B
02.02.2017 09:00   A
01.02.2017 18:00   AC
01.02.2017 16:00   AB
02.02.2017 11:00   C
01.02.2017 13:00   AA
02.02.2017 12:00   D
01.02.2017 21:00   AD

输出应类似于->

01.02.2017 13:00   AA
01.02.2017 16:00   AB
01.02.2017 18:00   AC
01.02.2017 21:00   AD
02.02.2017 09:00   A
02.02.2017 10:00   B
02.02.2017 11:00   C
02.02.2017 12:00   D

编辑1

我实现了一个简单的示例:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;


public class Comperable {

    public static void main(String[] args) {

        try {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            List<Object[]> resultList = new ArrayList<Object[]>();
            Object[] array1 = { dateFormat.parse("2017-02-25 16:10:00.0"), "C" };
            Object[] array2 = { dateFormat.parse("2017-02-20 16:50:00.0"), "CB" };
            Object[] array3 = { dateFormat.parse("2017-02-19 19:42:00.0"), "AB" };
            Object[] array4 = { dateFormat.parse("2017-02-20 19:46:00.0"), "BA" };
            Object[] array5 = { dateFormat.parse("2017-02-16 19:33:58.0"), "ZC" };
            Object[] array6 = { dateFormat.parse("2017-02-16 19:45:10.0"), "A" };
            Object[] array7 = { dateFormat.parse("2017-02-16 20:47:48.0"), "B" };
            resultList.add(array1);
            resultList.add(array2);
            resultList.add(array3);
            resultList.add(array4);
            resultList.add(array5);
            resultList.add(array6);
            resultList.add(array7);
            Collections.sort(resultList, new Comparator<Object[]>() {

                public int compare(Object[] array, Object[] otherArray) {
                    int dateComparison = (((Date) array[0]).compareTo((Date) otherArray[0]));
                    return dateComparison == 0 ? ((String) array[1]).compareTo((String) otherArray[1]) : dateComparison;
                }
            });

            for (int i = 0; i <= resultList.size() - 1; i++) {
                Object[] row = resultList.get(i);
                System.out.println("Date: " + row[0] + "  name: " + row[1]);

            }

        } catch (ParseException e) {

            e.printStackTrace();
        }

    }

}

最主要的是,您需要将Object类型转换为Date类型并调用compareTo方法。

(1)将array[4]otherArray[4]类型otherArray[4]为Date类型,然后调用compareTo

(2)另外,将array[3]otherArray[3]类型otherArray[3]String类型,然后调用compareTo

您可以使用内联注释引用以下代码:

Collections.sort(resultList, new Comparator<Object[]>() {
     public int compare(Object[] array, Object[] otherArray) {

     //do the Date comparison by casting Object to Date
     int dateComparison = (((Date)array[4]).compareTo((Date)otherArray[4]));

      //Now, do the String comparison by casting Object to String
     return dateComparison == 0 ? 
             ((String)array[3]).compareTo((String)otherArray[3]) : dateComparison;
      }
 });

我想在日期之后对列表进行排序,然后在String之后对列表进行排序,因为我想在jasper报告中打印数据。 就我而言,我无法管理数据库中的排序。

上面的代码完全相同 ,它首先比较Date对象,如果它们相等,则将比较字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM