簡體   English   中英

哪種數據結構最適合2個相關列表

[英]What data structure works best for 2 related lists

我正在嘗試為貨幣兌換計算器實現源項目和目標項目的列表(例如,可以通過下拉列表選擇),該列表也需要根據彼此進行更改。

例如,當我選擇一種來源貨幣時,我想將目標列表更改為僅該來源支持的貨幣。 反之亦然,因此,如果我選擇僅某些來源支持的目標貨幣,則來源清單應相應更改。

我認為一個選擇可能是所有貨幣的列表,每種都包含受支持的來源和目標貨幣的列表? 還是有更好的方法來實現這一目標?

如果在這里需要考慮性能,我會感到非常驚訝-尤其是在驅動下拉列表等GUI元素時。 因此,我建議最簡單,最直接的方法最好。 就像是:

interface Exchange {
    Currency getSource();
    Currency getTarget();
    double getRate();
}

public class Exchanges {
    private final List<Exchange> exchanges = new ArrayList<>();

    public Stream<Currency> getSourcesWithTarget(Currency target) {
        return exchanges.stream()
            .filter(e -> e.getTarget().equals(target))
            .map(Exchange::getSource).distinct();
    }

    public Stream<Currency> getTargetsWithSource(Currency source) {
        return exchanges.stream()
            .filter(e -> e.getSource().equals(source))
            .map(Exchange::getTarget).distinct();
    }

    public double getRate(Currency source, Currency target) {
        return exchanges.stream()
            .filter(e -> e.getSource().equals(source) && e.getTarget().equals(target))
            .map(Exchange::getRate)
            .findAny().orElseThrow(IllegalArgumentException::new);
    }
}

getRate方法是一個獎勵:-)

暫無
暫無

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

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