データの収集でプロセスを実行するためのグッドデザインパターン?
-
19-09-2019 - |
質問
ベストだと思うのコードで説明したが、これは単純な例です。
public class MyPOJO {
public String name;
public int age;
public MyPOJO(String name, int age) {
this.name = name;
this.age = age;
}
}
public class MyProcessor {
public List<MyPOJO> process(List<MyPOJO> mypojos) {
List<MyPOJO> temp = new ArrayList<MyPOJO>;
for (int i=0; i <moypojos.size(); i++) {
if (filterOne(mypojos[i])) continue;
if (filterTwo(mypojos[i])) continue;
if (filterThree(mypojos[i])) continue;
temp.add(mypojos[i];
}
}
public boolean filterOne(MyPOJO mypojo) {
// in practice filters aren't so basic
return (mypojo.age < 21);
}
// assume implementations for the other filter methods
}
醜いむ〜。基本的に私はコレクションを持っていると私は一定の基準を満たすオブジェクトの処理を継続するために一種のふるいを通してそれを渡すようにしたいと思います。私の推測では、ブール値を返すメソッドの束よりも、このためのより良いパターンがあります。
解決
あなたはIFilters
のリストを持つことができます。
そのような
boolean filtersResult = false;
for (IFilter filter : filters) {
filterResult = filter.process(mypojos[i])
if (filterResult)
break;
}
他のヒント
あなたは、彼らがコレクションを取るようにあなたのフィルタを実装し、フィルター処理されたコレクションを返したいことがあります:
public interface IFilter<E> {
public Collection<E> filter(Collection<E> input);
}
あなたが一緒に非常に些細なチェーンをフィルタリングすることができます。この方法で。欠点は、大規模なコレクションのために、それは遅く、より多くのスペースを取るということです。しかし、コードが多く、読みやすいです。
なぜ豆-クエリを使わないのでしょうか?それはあなたのコードを読みやすくすることができます。
List<MyPOJO> result=selectBean(MyPOJO.class).where(
not(
anyOf(
value("aga",lessThan(21)),
value("age",greaterThan(50))
)
)
.executeFrom(myPojos).
所属していません StackOverflow