2016-03-20 14 views
0

Birbirine bağlı olarak değişmesi gereken bir para birimi hesaplayıcısı için kaynak ve hedef öğelerinin (örneğin açılır menüden seçilebilir) bir listesini gerçekleştirmeye çalışıyorum.2 ilgili liste için en uygun veri yapısı hangileridir

Örneğin; Bir kaynak para birimi seçtiğimde, hedef listeyi sadece bu kaynak için desteklenenleri değiştirmek istiyorum. Ve aynı zamanda tersi, bu yüzden, sadece bazı kaynaklardan desteklenebilen bir hedef para birimi seçersem, kaynak listesi buna göre değişmelidir.

Bir seçenek, desteklenen bir kaynak ve hedef para birimlerini içeren tüm para birimlerinin bir listesi olabilir bence? Ya da bunu uygulamak için daha iyi bir yaklaşım var mı?

+0

:-) bir bonus sizin para nelerdir? Onları ip gibi tutuyor musun yoksa sınıfın var mı? Bazı kodlar yardımcı olabilir. – Filkolev

+1

Sadece tek bir 'List >' kullanın. –

cevap

0

Performansın burada dikkate alınması gerekiyorsa çok şaşırıyorum - özellikle bu, aşağı açılan listeler gibi GUI öğelerini kullanmak için kullanılıyorsa. Bu yüzden en basit ve en doğrudan tavsiye ederim. gibi bir şey:

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 yöntemle