簡體   English   中英

比較器使用我班級的 String 字段進行比較?

[英]Comparator using a String field of my class for comparison?

我有一個 A 類型的對象列表,我必須為 A 的字段排序,它是 String 類型的。

public class A{
    public String field1;
    public Integer field2;
    ...
}

如果我必須訂購 int 字段會這樣做:

Collections.sort(listOfA, new Comparator<A>() {
        public int compare(A p1, A p2) {
            return p1.field2 - p2.field2);
            }
        });

但不幸的是需要按字符串類型的字段排序。

我怎樣才能做到這一點?

    public int compare(A p1, A p2) {
        return p1.field2.compareTo( p2.field2) );
        }

或者你的類可以實現接口Comparable ,像這樣

public class A implements Comparable<A> {
  public String field1;
  public Integer flied2;

    public int compareTo(A o) {
        return this.field1.compareTo(o.field1);
    }

}

這將使您能夠

Collections.sort(listofA);

如果 A 總是按 field1 排序,則哪個 IMO 更可取/更清潔。

你可以使用 String compareTo

盡管如此,舊線程。
使用 Java 8,您現在擁有 lambda:

listOfA.sort((a,b) -> a.field1.compareTo(b.field1));

此外,如果一個人有一個用於 field1 的吸氣劑,那一個可能應該,你也可以這樣做

listOfA.sort(Comparator.comparing(A::getFieldOne));

如果你沒有吸氣劑,還有這個:

listOfA.sort(Comparator.comparing(a -> a.field1));

暫無
暫無

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

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