リポジトリからデータを返すN個のリストがあります。私はこれらの3つのリストの最初の空でないものを返したい(それぞれが別のSQLを実行してデータを取得する)。最初の空ではないリストをJava 8で遅延的に返します。
私はこれをゆっくりやりたいので、受け入れ可能な結果が見つかった場合はデータベース上でSQLを実行する必要はありません。私のコードは(変更された)
@Override
public List<Something> dataService(Data data) {
return firstNonEmptyList(repository.getDataWayOne(data.getParameter()),
repository.getDataWayTwo(data.getParameter()),
repository.getDataWayThree(data.getParameter().getAcessoryParameter())
Collections.singletonList(repository.getDefaultData(data.getParameter()));
}
@SafeVarargs
private final List<Something> firstNonEmptyList(List<Something>... lists) {
for (List<Something> list : lists) {
if (!list.isEmpty()) {
return list;
}
}
return null;
}
これは動作しますが、怠惰ではありません。何か案は?
私が間違っている場合は私を修正しますが、lambdaの中でリストの呼び出しをラップすると怠け者になると思います。 'firstNonEmptyList'では、あなたが望むもの(すなわち、空でないリストを返すもの)を見つけるまで、各ラムダを評価します。ラムダと呼ばれていないものは決してクエリを実行しません。とにかく、shmoselによって提供されるソリューションは、私が記述したやり方はよりエレガントです。 – Gabriel