Spring/프로젝트 코드 리뷰
Spring 프로젝트 별점 순 출력
code2772
2023. 3. 4. 11:28
728x90
반응형
/* 별점 높은순 출력, 어느정도 인원이 평가해야(타임리프 적용) 0명이 평가한 경우 한명이 바로 5점을 주면
1등이 나오기 때문*/
@Transactional(readOnly = true)
public List<MovieDto> movieStar() {
//평균 구하기
List<MovieDto> result = new ArrayList<>();
// 평균점수가 최소 4.2 이상인 : 설정을 안할 경우 데이터가 없을경우 1점도 들어갈 수 있음
List<MovieDto> result2 = new ArrayList<>();
// 평가한 인원이 최소 5명인 : 평가자가 0명인 경우 처음 평가한 이가 5점을 주면 바로 최고 점수
List<MovieDto> result3 = new ArrayList<>();
List<Movie> movieStar = movieRepository.findAll();
for(Movie m : movieStar){//평균
double sum = 0;
int starCount = 0;
for(Star star : m.getStar()){
sum += star.getStarPoint();
starCount = m.getStar().size();
}
Double avg = Math.round((sum / starCount) * 10.0) / 10.0;
result.add(MovieDto.from(m, avg));
}// 최소 점수
for(MovieDto m : result){
if(m.avg() >= 4.2){
result2.add(m);
}
}// 최소 인원
for(MovieDto m : result2){
if(m.starList().size()>=3){
result3.add(m);
}
}// 평균 순으로 1위부터 뽑기
result3 = result3.stream().sorted(Comparator.comparing(MovieDto::avg)
.reversed()).collect(Collectors.toList());
return result3;
}
✔ 평균점수가 최소 4.2 이상인 : 설정을 안할 경우 데이터가 없을경우 1점도 들어갈 수 있다는 생각으로 최소 점수를 지정해 주었다.
for(MovieDto m : result){
if(m.avg() >= 4.2){
result2.add(m);
}
✔ 평가한 인원이 최소 n명인 : 평가자가 0명인 경우 처음 평가한 이가 5점을 주면 바로 최고 점수
for(MovieDto m : result2){
if(m.starList().size()>=3){
result3.add(m);
}
✔ 평균 순으로 1위부터 뽑기 stream().sorted 를 사용하기
result3 = result3.stream().sorted(Comparator.comparing(MovieDto::avg)
.reversed()).collect(Collectors.toList());
✔ 인기순 출력결과
반응형