我正在尝试为货币兑换计算器实现一个源项目和目标项目列表(例如可以通过下拉列表选择),这也需要相互改变。
例如当我选择源货币时,我想将目标列表更改为仅支持该源的列表。反之亦然,因此,如果我选择的目标货币只能从某些来源获得支持,则源列表应相应更改。
我认为一个选项可能是所有货币的清单,每个货币都包含支持的来源和目标货币列表?或者有更好的方法来实现这个吗?
答案 0 :(得分:0)
如果在这里需要考虑性能,我会非常惊讶 - 特别是如果这是用于驱动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
方法是奖励: - )