簡體   English   中英

使用比較器而不添加類

[英]Using comparator without adding class

我正在嘗試按字符串長度對arraylist進行排序,我知道實現Comparator,但是我想知道是否可以在我的函數中完成此操作,而無需添加任何額外的類或方法? 理想情況下,我想將它們輸出的最短到最長,但是我可以做到!

這是我想用來實現比較器的方法的摘要。

public static void sCompare(BufferedReader r, PrintWriter w) throws IOException {

    ArrayList<String> s= new ArrayList<String>();

    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        s.add(line);
        n++;
    }
    //Collections.sort(s);  

    Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }
  }

預先感謝您的任何投入!

我看不到實現Comparator接口有什么問題。 如果您唯一關心的是執行函數中的所有操作,則可以使用匿名實現。 類似於以下內容:

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    });  

(這將替換您當前的行//Collections.sort(s);

PS:您永遠不會使用n的值。

PPS:您可能必須根據return語句中想要的順序來反轉o1和o2。

用匿名類實現接口的另一個示例

我將假設“類”的意思是“頂級類”,從而允許使用匿名類

Collections.sort(s, new Comparator<String>() {
    public int compare(String a, String b) {
        // java 1.7:
        return Integer.compare(a.length(), b.length());
        // java 1.6
        return a.length() - b.length();
    }
});

暫無
暫無

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

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