繁体   English   中英

字符串和整数的CompareTo / Sorting 2D数组

[英]CompareTo/Sorting 2D array of Strings AND Integers

好的,所以我现在才知道如何通过字符串和整数对2d数组进行排序,但是我不确定如何将它们组合在一起。

我有一个二维的用户数组,每一行都有一个用户数据。 数据分别是列中的字符串或整数,所以如果我有多种比较方法,例如按名称排序或按电话号码排序,那么如何实现初始的2d数组,因为如果我将其声明为String,则无法再进行比较按整数,如果我将其声明为整数,则无法再通过String进行比较。

到目前为止,我正在使用基本的2d排序方法。

    final Integer[][] data1 = userlistcopy;
    Arrays.sort(data1, new Comparator<Integer[]>() {

        @Override
        public int compare(final Integer[] entry1, final Integer[] entry2) {
            final Integer time1 = entry1[1];
            final Integer time2 = entry2[1];
            return time2.compareTo(time1);
        }
    });
    System.out.println("====");
    for (final Integer[] s : data1) {
        System.out.println(s[0] + " " + s[1]);
    }

要么

final String[][] data1 = userlistcopy;
        Arrays.sort(data1, new Comparator<String[]>() {

            @Override
            public int compare(final String[] entry1, final String[] entry2) {
                final String time1 = entry1[3];
                final String time2 = entry2[3];
                return time2.compareTo(time1);
            }
        });
        System.out.println("====");
        for (final String[] s : data1) {
            System.out.println(s[0] + " " + s[1]);
        }

因此,如果我比较不同的变量类型而又不会使编译器不喜欢我,那么我有什么方法可以转换变量? 或者当我只比较数组的整数列时,是否有可能只将整个compareTo方法声明为Integer(即使包含String)?

谢谢!

编辑,更多详细信息:我有一个2D数组,即IE

[0] [鲍勃] [3] [乔] [4] [约翰] [6] [吉米]

它存储在String [] []用户列表副本中; 如果我想使用String进行compareTo,它将可以正常工作,因为我可以比较userlistcopy [1],即使忽略了整数,也可以将ints视为字符串。 但是,如果我想通过Integer进行比较,则必须将userlistcopy更改为Integer数组,然后由于它们存在字符串而出现异常,而我忽略了将String数据槽设置为空的错误。

编辑(显示出来)。

好的,我知道了! 我只是将所有数据都转移到一个对象数组中,所以我声明了它们各自的String / Int类型,然后将其与通过对象进行比较,在实际比较中,我只是将其转换/解析为自己的需要,例如。 。

Arrays.sort(data1, new Comparator<Object[]>() {

        @Override
        public int compare(final Object[] entry1, final Object[] entry2) {
            final Integer time1 = Integer.parseInt(entry1[1].toString());
            final Integer time2 = Integer.parseInt(entry2[1].toString());
            return time2.compareTo(time1);
        }
    });

要么

final Object[][] data1 = datanew;
    Arrays.sort(data1, new Comparator<Object[]>() {

        @Override
        public int compare(final Object[] entry1, final Object[] entry2) {
            final String time1 = entry1[2].toString();
            final String time2 = entry2[2].toString();
            return time2.compareTo(time1);
        }
    });

谢谢您的帮助!

绝对确定您不需要/想要2D阵列。 您需要类型为“用户”的一维数组

class User{
    public int ID;
    public String name;
}

然后使用自定义比较器,就像已经为数组排序一样。

整数解决方案:

Arrays.sort(data1, new Comparator<Object[]>() {

            @Override
            public int compare(final Object[] entry1, final Object[] entry2) {
                final Integer time1 = Integer.parseInt(entry1[1].toString());
                final Integer time2 = Integer.parseInt(entry2[1].toString());
                return time2.compareTo(time1);
            }
        });

或字符串

final Object[][] data1 = datanew;
    Arrays.sort(data1, new Comparator<Object[]>() {

        @Override
        public int compare(final Object[] entry1, final Object[] entry2) {
            final String time1 = entry1[2].toString();
            final String time2 = entry2[2].toString();
            return time2.compareTo(time1);
        }
    });

或日期

public int compare(final Object[] entry1, final Object[] entry2) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
                time1 = sdf.parse(entry1[3].toString());
                time2 = sdf.parse(entry2[3].toString());

                return time2.compareTo(time1);
            } catch (ParseException ex) {
                ex.printStackTrace();
            }

        }
    });

我可以通过将整个2d数组作为一个对象,然后在Object compareTO方法中分别对它们进行比较,来分别比较它们。 :)

暂无
暂无

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

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