본문 바로가기
Spring/프로젝트 코드 리뷰

Spring 프로젝트 별점 순 출력

by code2772 2023. 3. 4.

[ 목차 ]

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

     

     

    ✔ 인기순 출력결과

    반응형