2016-05-11 8 views
0

私は、ストリームやフィルタなどのJava 8の新機能に真実を伝えています.1年以上Javaで書かれていません。 誰かが提案をすることができたら、私の問題です。javaストリームを使ってdbからデータを取得する

@Override 
public ArrayList<Agent> getAllEnabledAgents() throws Exception {  
    ArrayList<Agent> agents = repository.all(); //redis repository 
    Stream<Agent> result = agents.stream().filter(a-> a.equals(a.getConfigState().Enabled)); //enum 
    return result; //I dont know how to return result or whether I am using stream correctly. 

} 

主な考えは、すべての有効なエージェントを返すことです。 gerConfigState()は列挙型(__ConfigState)を返します。もしこれが正しく行われていれば、わからない。

+1

なぜこれらのすべてをデータベースから取り出し、メモリ内の有効なものをフィルタリングするのですか?それは良い考えではありません。 Criteria(where句)を使用してデータベースから有効なものをフェッチするだけです。 – STaefi

答えて

1

collect-Streamの数値を使用してください。また、変数aがクラスAgentのオブジェクトであるため、フィルタが少し奇妙に見えます。

ので、おそらくこのような何か:

agents.stream() 
     .filter(a -> a.getConfigState() == Enabled) 
     .collect(Collectors.toList()); 

はその後、再び、コメント状態のように、あなただけのクエリでこれをフィルタリングしたほうが良いかもしれません。

+0

私はそれが奇妙に見えると思います。帰りはどうですか? あなたのコードなどを試してみましたが、ほとんどが「のリストを

+0

に変換できません。私はこの昨日試しました。結果は、私が列挙型の状態を比較できないようなものでした。 ()は、enum状態を返します。 –

+0

これはどのような行ですか?どの行ですか?getConfigState()は列挙型定数を返します。別の列挙型定数と比較することができます。 – Tobb

1

フィルタ条件が正しくありません(getConfigState()は列挙型を返します)。あなたは、以下のようなものを使用することができます助けを

Stream<Agent> streamAgent = agents.stream().filter(a-> a.getConfigState() == Enabled);  
return streamAgent.collect(Collectors.toList()); 
+0

これは私がやる方法です。 「Tは文句: ストリーム結果= agents.stream() \t \t \t \tをフィルタリング(A-> a.getConfigState()に等しい( "有効")。); 。私はchek intにjunitテストを書くつもりです。もう1つ...返品時ににキャストする必要があります。 –

+0

enumを比較するには、equals()または==を使用できます。賛否両論はすでにここで議論されています。 http://stackoverflow.com/questions/1750435/comparing-java-enum-members-or-equals私はそれがより安全であることを好むだろう。 – Vijay

+0

また、enum自体ではなくenum文字列を比較しています。 a.getConfigState()。equals(Enabled)を使用し、文字列ではなく実際の列挙型を渡す必要があります。 – Vijay

0

感謝を。これは最終バージョンです:

@Override 
public List<Agent> getAllEnabledAgents() throws Exception { 
     return repository.all() 
      .stream() 
      .filter(a-> a.getConfigState() == ConfigState.Enabled) 
      .collect(Collectors.toList()); 
} 
関連する問題