包裹分箱算法
包裹 分箱简单算法 算出临界值 分箱数量加1
/**
*预估分箱算法
* @return
*/
private Tuple2<BigDecimal,Integer>  calculateFareAndNums(List<BigDecimal> list,PxChannelPrice price){        if(list==null||list.isEmpty()){
Tuple2.of(BigDecimal.ZERO,0);
}
Collections.sort((List<BigDecimal>) list, new Comparator<BigDecimal>() {
@Override
public int compare(BigDecimal o1, BigDecimal o2) {
return o2pareTo(o1);
}
});
BigDecimal taxSum = BigDecimal.ZERO;//税费
BigDecimal taxLmt = new BigDecimal(50);//税费限制
int  bagCnt = 0;//分包数量
for (int i = 0;i<list.size();i++){
BigDecimal decimal = (i);
if(decimalpareTo(taxLmt)>-1){
bagCnt++;
}else {
if(taxSum.add(decimal)pareTo(taxLmt)>-1){
bagCnt++;
taxSum = decimal;
}else{
taxSum = taxSum.add(decimal);
}
}
}
if(taxSumpareTo(BigDecimal.ZERO)==1){
bagCnt++;
}
return Tuple2.of(new BigDecimal(bagCnt).InitialWeightPrice()),bagCnt);
}
public class Tuple2<V1, V2> {
private final V1 v1;
private final V2 v2;
public Tuple2(V1 t1, V2 t2) {
this.v1 = t1;
this.v2 = t2;
}
public static <V1, V2> Tuple2<V1, V2> of(V1 v1, V2 v2) {
return new Tuple2<>(v1, v2);
}
public V1 _1() {
return v1;
}
public V2 _2() {
return v2;
}
@Override
public String toString() {
return "(" + v1 + "," + v2 + ')';
}
@Override
public boolean equals(Object o) {
bigdecimal转换为integerif (this == o)
return true;
if (o == null || getClass() != o.getClass())            return false;
Tuple2<?, ?> tuple2 = (Tuple2<?, ?>) o;
if (!v1.equals(tuple2.v1))
return false;
return v2.equals(tuple2.v2);
}
@Override
public int hashCode() {
int result = v1.hashCode();
result = 31 * result + v2.hashCode();
return result;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。