2016-03-20 11 views
0

通貨換算計算機のソース項目と対象項目(ドロップダウンで選択することができます)のリストを実装しようとしています。2つの関連リストに最適なデータ構造

ソース通貨を選択すると、そのソースの対象リストのみをサポート対象に変更したいと考えています。また、その逆もあるので、一部のソースからしかサポートされないターゲット通貨を選択すると、ソースリストがそれに応じて変更されます。

私は、サポートされているソースとターゲットの通貨のリストを含むすべての通貨のリストが考えられますか?あるいはこれを実装するためのよりよいアプローチがありますか?

+0

:-)ボーナスは、あなたの通貨は何ですか?あなたはそれらを文字列として保つか、クラスを持っていますか?いくつかのコードが役に立ちます。 – Filkolev

+1

ただ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方法は

関連する問題