簡體   English   中英

用字符串和整數對Java中的ArrayList進行排序

[英]Sorting an ArrayList in Java with Strings and Integers

我在Java中有一個字符串數組列表。 所有字符串的格式均為[Integer] [String]。 例如:

100 Tom Dsa 23 John Asdf
98 Mary Qwerty

我想按整數排序此ArrayList。 正確的輸出為:

23 John Asdf 98 Mary Qwerty 100 Tom Dsa

現在,我正在使用以下代碼:

Collections.sort(obj);

它的問題是將整數解釋為字符串,因此100在2之前排序。

有什么辦法可以正確分類嗎?

一種方法:您可以編寫一個自定義的Comparator ,使用java.util.Scanner從String掃描int值,然后將它們進行比較:

Collections.sort(obj, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return new Scanner(s1).nextInt() - new Scanner(s2).nextInt();
    }
});

編輯:當下面沒有行距時,可以使用Scanner解析Integer是安全的:

" 98 Mary Qwerty"

而不是"98 Mary Qwerty"

如果列表中的元素總是像Integer和String一樣由空格分隔,則可以在下面使用

    Collections.sort(obj, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return Integer.parseInt(s1.split("\\s+")[0]) -  Integer.parseInt(s2.split("\\s+")[0]);

        }
    });
    Map<Integer, String> map = new TreeMap<Integer, String>();
    for (String string : obj) {
        String key = string.substring(0, string.indexOf(" "));
        map.put(Integer.valueOf(key),
                string.substring(key.length(), string.length()));
    }
    obj.clear();
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        obj.add(entry.getKey().toString()+entry.getValue());
    }
    System.out.println(obj);

輸出::

[23 John Asdf,98 Mary Qwerty,100 Tom Dsa]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM