小编Sam*_*ala的帖子

使用java 8划分对象列表中的bigdecimal值?

我有一个Invoice对象列表,其中包含属性频率和数量(BigDecimal).

1)需要在不考虑精度的情况下,根据频率乘以和改变量.在下面显示的代码中输出但是输出失去了一些精度.金额值应为100.

2)是否可以用Java 8流API替换发票列表中的金额值.尝试使用

invoiceList.forEach(s -> s.getAmount().multiply(new BigDecimal("10")));
Run Code Online (Sandbox Code Playgroud)

但是这不会取代对象中的金额值.在这种情况下无法弄清楚使用replaceAll,尝试下面的代码,但给出编译错误,

 newList.replaceAll((v) -> v.getAmount().multiply(frequencyFactor.get(v.getFrequency())));
Run Code Online (Sandbox Code Playgroud)

整个主要课程如下.无法更改任何数据类型或设计.我必须从Web服务处理获取的列表.

public class InvoiceMain {
    public static void main(String[] args) {
        List<Invoice> invoiceList = Arrays.asList(new Invoice("Quarterly", new BigDecimal(300)), new Invoice("Annually", new BigDecimal(1200)));
        Map<String, BigDecimal> frequencyFactor = new HashMap<>();
        frequencyFactor.put("Annually", new BigDecimal(1.0 / 12));
        frequencyFactor.put("Quarterly", new BigDecimal(1.0 / 3));
        for (Invoice invoice : invoiceList) {
            invoice.setAmount(invoice.getAmount().multiply(frequencyFactor.get(invoice.getFrequency())));
        }
        System.out.println(invoiceList);
    }
}

class Invoice {
    private String frequency;
    private BigDecimal amount;

    public Invoice(String frequency, BigDecimal amount) {
        super();
        this.frequency = frequency; …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

2
推荐指数
1
解决办法
647
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

lambda ×1