簡體   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