我很难想到如何问这个问题所以我会创建一个例子来证明我的要求:
假设我有我的模特:
public class UserEvaluation {
String name;
Date respondedAt;
}
public class Evaluation {
String name;
List<UserEvaluation> userEvaluations;
{
然后在我的EvaluationService中,我需要知道已响应的用户评估量(respondedAt != null
)。
可能的解决方案:
1迭代所有项目:
Evaluation evaluation = evaluationRepository.get(1);
Long count = 0;
for(UserEvaluation userEvaluation : evaluation.getUserEvaluations()) {
if(userEvaluation.getRespondedAt() != null) {
count++;
}
}
2 Lambda表达式:
Evaluation evaluation = evaluationRepository.get(1);
Long count = evaluation.getUserEvaluations().stream()
.filter(ue -> ue.getRespondedAt() != null)
.count();
3通过查询数据库:
Evaluation evaluation = evaluationRepository.get(1);
Long count = userEvaluationRepository.getRespondedCountByEvaluation(evaluation); //And implement this simple count query.
所以这是最简单的事情。我会选哪个?我在我的应用程序中使用了很多迭代器和lambda流迭代器表达式。但我担心这应该是一个错误,我需要与数据库进行更多的交互?我是不是该?我不应该吗?
答案 0 :(得分:0)
如果您不确定我会设计它,那么您可以根据需要进行更改。有一个访问数据库的DAO实现,但如果确定使用数据库,可以更改为在内存数据中使用的实现速度不够快。
interface DatabaseDAO {
long getRespondedCountByEvaluation(Evaluation e);
}
这取决于哪种方法可以检索更少的数据。如果你抓取一次数据并从那里多次提取信息它可以更快,但如果你每次只获得一小部分并拥有一个索引数据库,它可以更快。我会设计它