0
我想实现货币兑换计算器的源和目标项目列表(例如可以通过下拉菜单选择),这些项目也需要根据对方进行更改。什么数据结构最适合2个相关列表
例如,当我选择源货币时,我想将目标列表更改为仅支持源码的列表。反之亦然,所以如果我选择一种可能来自某些来源的目标货币,那么来源列表应该相应地改变。
我认为一个选项可能是所有货币的列表,每个货币都包含支持的源货币和目标货币列表?或者有没有更好的方法来实现这一点?
我想实现货币兑换计算器的源和目标项目列表(例如可以通过下拉菜单选择),这些项目也需要根据对方进行更改。什么数据结构最适合2个相关列表
例如,当我选择源货币时,我想将目标列表更改为仅支持源码的列表。反之亦然,所以如果我选择一种可能来自某些来源的目标货币,那么来源列表应该相应地改变。
我认为一个选项可能是所有货币的列表,每个货币都包含支持的源货币和目标货币列表?或者有没有更好的方法来实现这一点?
如果性能需要考虑在这里,我会感到非常惊讶 - 特别是如果这用于驱动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
方法是:-)
奖励你有什么货币?你把它们保持为字符串还是你有一堂课?一些代码可能会有所帮助。 – Filkolev
只需使用一个'List>'。 –