java tea外卖_点外卖,钱怎么算 - coffee-tea-milk的个人空间 - OSCHINA - 中文开源技术交流社区...

想喝喝奶茶,下了一单,啵啵跟烧仙草一起,葡萄干跟椰果一起!

d11738b5c6e9d6f28043fe7c291dd97c.png

import lombok.Data;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

public class WaimaiJiqian {

public static void main(String[] args) {

List moneys = new ArrayList<>();

moneys.add(new MemberOfMoney("小广", new BigDecimal("15")));

moneys.add(new MemberOfMoney("小溪", new BigDecimal("13")));

moneys.add(new MemberOfMoney("小谁", new BigDecimal("17")));

moneys.add(new MemberOfMoney("小轩", new BigDecimal("14")));

BigDecimal allPay = new BigDecimal("32");

BigDecimal premium = new BigDecimal("3.5"); // 额外费用,例如:配送费

BigDecimal preferential = new BigDecimal("27"); // 除去优惠额外费用,例如:配送费

BigDecimal preferentialTotalPrice = preferential.add(premium); // 总优惠

// 计算比例

BigDecimal reduce = moneys.stream().map(money -> {

return money.getMoneyInfos()[0];

}).reduce(BigDecimal.ZERO, BigDecimal::add);

BigDecimal totalPrice = reduce.add(premium); // 总价 计算完比例,加入额外费用,例如:配送费

List proportions = moneys.stream().map(money -> {

money.getMoneyInfos()[1] = money.getMoneyInfos()[0].divide(reduce, 2, BigDecimal.ROUND_HALF_DOWN);

return money;

}).collect(Collectors.toList());

// 计算优惠

List preferentials = proportions.stream().map(proportion -> {

proportion.getMoneyInfos()[2] = preferential.multiply(proportion.getMoneyInfos()[1]);

proportion.getMoneyInfos()[3] = preferentialTotalPrice.multiply(proportion.getMoneyInfos()[1]);

return proportion;

}).collect(Collectors.toList());

// 计算应付

List copes = preferentials.stream().map(proportion -> {

proportion.getMoneyInfos()[4] = allPay.multiply(proportion.getMoneyInfos()[1]);

for (int i = 0; i < proportion.getMoneyInfos().length; i++) {

proportion.getMoneyInfos()[0] = proportion.getMoneyInfos()[0].setScale(2, BigDecimal.ROUND_HALF_UP);

proportion.getMoneyInfos()[1] = proportion.getMoneyInfos()[1].setScale(2, BigDecimal.ROUND_HALF_UP);

proportion.getMoneyInfos()[2] = proportion.getMoneyInfos()[2].setScale(2, BigDecimal.ROUND_HALF_UP);

proportion.getMoneyInfos()[3] = proportion.getMoneyInfos()[3].setScale(2, BigDecimal.ROUND_HALF_UP);

proportion.getMoneyInfos()[4] = proportion.getMoneyInfos()[4].setScale(2, BigDecimal.ROUND_HALF_UP);

}

return proportion;

}).collect(Collectors.toList());

BigDecimal verify = copes.stream().map(cope -> cope.getMoneyInfos()[4]).reduce(BigDecimal.ZERO, BigDecimal::add);

System.out.printf("%-5s %-5s %-5s %-5s %-5s %-5s(总价:%s,实付价格:%s,优惠价格:%s,人数:%s)%n", "是谁呢", "原价", "占比", "优惠价", "总优惠", "应付价",

reduce.toString(), allPay.toString(), preferential.toString(), moneys.size());

copes.forEach(cope -> {

System.out.printf("%-5s %-5s %-5s %-5s %-5s %-5s%n",

cope.getName(),

cope.getMoneyInfos()[0].toString(),

cope.getMoneyInfos()[1].toString(),

cope.getMoneyInfos()[2].toString(),

cope.getMoneyInfos()[3].toString(),

cope.getMoneyInfos()[4].toString());

});

System.out.printf("核实:%s%n", verify.toString());

}

}

@Data

class MemberOfMoney {

String name;

BigDecimal[] moneyInfos = new BigDecimal[5];

MemberOfMoney() {

}

MemberOfMoney(String name, BigDecimal[] moneyInfos) {

this.name = name;

int i = 0;

for (BigDecimal moneyInfo : moneyInfos) {

this.moneyInfos[i] = moneyInfo;

i++;

}

}

MemberOfMoney(String name, BigDecimal moneyInfo) {

this.name = name;

this.moneyInfos[0] = moneyInfo;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值