Как рассчитать рейтинг ежемесячно в java с помощью лямбда-выражений? - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь рассчитать рейтинг A на основе процентного соотношения по месяцам. Но в настоящее время с помощью лямбда-выражений ранг рассчитывается по годам. Итак, как рассчитать это исходя из месяца.

Вот код, который я пробовал:

List<MVisitsBean> summaryScore = rDao.getdealer_performance(mvBean,mvBean.getYear(),mvBean.getMonth(),mvBean.getRegion_id(),mvBean.getOutlet_id(),mvBean.getBrand_id(),mvBean.getDealer_id(),mvBean.getLimit(),total);

          double[] score = {Double.MIN_VALUE};
             int[] no = {0};
             Integer[] rank = {0};
             List<MVisitsBean> ranking = 
                     summaryScore.stream().sorted(Comparator.comparingDouble(MVisitsBean::getYtd_dealer_avg1).reversed())
                 .map(p -> {
                     ++no[0];
                     if (score[0] != p.getYtd_dealer_avg1()) rank[0] = no[0];
                     p.setYtd_dealer_rank(rank[0]);
                     return new MVisitsBean(rank[0], score[0] =  p.getYtd_dealer_avg1());
                 })
                 // .distinct() // if you want to remove duplicate rankings.
                 .collect(Collectors.toList());
             System.out.println(ranking);

                String jsonArray = gson.toJson(ranking);
                System.out.println(jsonArray);

1 Ответ

0 голосов
/ 25 мая 2020

Вы хотите рассчитать месяцы, а не годы. Итак, этот bean-компонент:

List<MVisitsBean> summaryScore = rDao.getdealer_performance(mvBean,mvBean.getYear(),mvBean.getMonth(),mvBean.getRegion_id(),mvBean.getOutlet_id(),mvBean.getBrand_id(),mvBean.getDealer_id(),mvBean.getLimit(),total);

Он вычисляет год и месяц. Я предполагаю, что если вы измените getYear на getMonth и getMonth на getDay (я предполагаю, что этот bean-компонент имеет что-то вроде "getDay"), все будет в порядке.

Затем в вашем потоке:

      List<MVisitsBean> ranking = 
                 summaryScore.stream().sorted(Comparator.comparingDouble(MVisitsBean::getYtd_dealer_avg1).reversed())
             .map(p -> {
                 ++no[0];
                 if (score[0] != p.getYtd_dealer_avg1()) rank[0] = no[0];
                 p.setYtd_dealer_rank(rank[0]);
                 return new MVisitsBean(rank[0], score[0] =  p.getYtd_dealer_avg1());
             })

Я не знаю точно, что делает каждый аргумент в компоненте. Но я предполагаю, что:

MVisitsBean::getYtd_dealer_avg1

Это что-то с годом фасоли. Вы должны найти что-то, относящееся к месяцу, например:

MVisitsBean::getMtd_dealer_avg1

в bean-компоненте и обновите получатель и сеттер в потоке (getYtd_dealer_avg1, setYtd_dealer_rank).

В противном случае сложно ответить точнее, не зная структуру MVisitsBean.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...