[英]How to calculate a rank on monthly basis in java by using lambda Expressions?
我正在尝试按月按百分比计算 A 排名。 但目前,在 Lambda 表达式的帮助下,Rank 正在逐年增长。 那么如何根据一个月来计算呢。
这是我尝试过的代码:
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);
您想计算月份而不是年份。 所以这个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”的内容)应该没问题。
然后在您的 stream 上:
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());
})
我不确切知道每个参数在 bean 中的作用。 但我假设:
MVisitsBean::getYtd_dealer_avg1
是豆年的事。 您应该找到与月份相关的内容,例如:
MVisitsBean::getMtd_dealer_avg1
在 bean 中并更新 Stream (getYtd_dealer_avg1, setYtd_dealer_rank) 中的 getter 和 setter。
否则,在不知道您的 MVisitsBean 结构的情况下很难更准确地回答。
希望它会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.