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());

 

 

✔ 인기순 출력결과

반응형