2017-06-01 7 views
0

私は自動車メーカー、モデル、およびトリムのリストを持っています。それらのオブジェクトのそれぞれには、それぞれ異なる属性があります。 Ex。自動車メーカーは、私の現在の設定は以下のようになり、他の人が検索できる複数のオブジェクト間に緩やかな関係を作成する

public Manufacturer { 
    private String manufacturerName; //Getter&Setter as well 
    private List<Model> modelList; //Getter&Setter as well 
    //additional attributes 
} 

public Model { 
    private String modelName; 
    private List<Trim> trimList; //Getter&Setter as well 
    //additional attributes 
} 

public Trim { 
    private String trimType; //Getter&Setter as well 
    //additional attributes 
} 

public ContainerClass { 
    public List<Manufacturer> manufacturerList; 
} 

は、今私はマツダ、3、グランドツーリングなどのオブジェクトを作成し、リスト内のオブジェクトを関連付けることができますなど、luxery対国内、スポーツ対輸入を持つことができます。しかし誰かが一緒に来て、サンルーフを持っている車がほしいと思っているなら、それは、すべての可能なメーカーとそのメーカーのすべてのモデルを調べて、そのトリムがサンルーフ属性を持っているかどうかを確認することが無駄だと感じます。自分自身を含め、開発者にとってこれをより簡単にするために使用できる戦略はありますか?

注:データベースを作成するための実際のデータがないため、私はデータベースを持っていませんが、これは後でそのデータを取得するまでの間のギャップです。 「データベースを作成する」と言ってください:)。また、JBehaveのExamplesTableオブジェクトからこの情報をロードしています。

+0

は、大きなマップを作成(または何でも)とデータの一貫性を保つために、より良いですか? –

+0

サイドノート:クラス 'SomethingClass'またはリスト' SomethingList'の名前付けには制限があり、強力ではありません。リストをセットにリファクタリングするとどうなりますか?この名前は、メンテナーに名前の由来について何を伝えていますか?コードは既にそれがリストかクラスか何かであることを私たちに伝えています。その実装のために名前を付けるときは、ノイズを追加するだけです。その機会は、あなたの名前がアルゴリズムに関する情報を増やすことであり、冗長な言葉遣いはその利益を犠牲にします。 –

+0

@ Stefanそれは私が考えている選択肢の一つです。 – swhite

答えて

2

あなたは、いくつかのサブストリームでメーカーをフィルタリングすることができます。

container.getManufacturerList().stream() 
    .filter(manufacturer -> 
     manufacturer.getModelList().stream().anyMatch(model -> 
      model.getTrimList().stream().anyMatch(trim -> 
       trim.getTrimType().equals("sunroof")))) 
    .collect(Collectors.toList()); 
+0

これは間違いなく私が使用するオプションのようです。私はそれを撃つだろう。 – swhite

関連する問題