簡體   English   中英

Java比較器將兩個不同的字段相互比較

[英]Java Comparator comparing two different fields against one another

我想知道是否可以使用比較器來比較兩個不同的字段。 一個簡單的例子是制作一條線性鏈,其中每個對象都有一個頭部和一個尾巴,每個對象的頭部和尾部分別是另一個對象的尾巴或頭部。 對於這個簡單的示例,我假設所有對象都有一個頭和一個尾,並且鏈始終是線性的,沒有間隙。

public class Link {
    private Object head;
    private Object tail;
...
}

並建立鏈條。 我真的不在乎它是上升還是下降。

LinkedList<Link> chain ...
chain.sort((o1, o2) -> {

        if (o1 != null && o2 != null) {
            if (Objects.equals(o1.getHead(), o2.getTail())) {
                return -1;
            }

            if (Objects.equals(o1.getTail(), o2.getHead())) {
                return 1;
            }
        }

        return 0;
    });

這里的問題是,當原始列表順序中的相鄰鏈接之間沒有任何關系時,返回零將意味着項目僅保持當前順序。 我知道我可以通過對原始列表和要構建的列表進行更手動的迭代來完成此操作,但是我很好奇是否有辦法通過比較器來完成此操作。

為了對對象進行排序,我們需要頭部和尾部具有可比性。 例如,調用o1.getHead()。compare(o2.getTail())會產生一個數字,指示頭是否位於尾部之前,反之亦然。

假設頭和尾對象具有比較器,則可以執行以下操作:

chain.sort((o1, o2) -> {
    if (o1 != null && o2 != null) {
        return o1.getHead().compare(o2.getTail())
    }
    return 0;
});

暫無
暫無

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

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