2016-03-20 41 views
0

我想实现货币兑换计算器的源和目标项目列表(例如可以通过下拉菜单选择),这些项目也需要根据对方进行更改。什么数据结构最适合2个相关列表

例如,当我选择源货币时,我想将目标列表更改为仅支持源码的列表。反之亦然,所以如果我选择一种可能来自某些来源的目标货币,那么来源列表应该相应地改变。

我认为一个选项可能是所有货币的列表,每个货币都包含支持的源货币和目标货币列表?或者有没有更好的方法来实现这一点?

+0

奖励你有什么货币?你把它们保持为字符串还是你有一堂课?一些代码可能会有所帮助。 – Filkolev

+1

只需使用一个'List >'。 –

回答

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方法是:-)

相关问题