当前位置: 首页 > 知识库问答 >
问题:

创建BigDecimal列表的对象绑定以获取总数

席俊达
2023-03-14

我正在尝试使用以下行创建LineItem金额列表的绑定:

ReadOnlyObjectWrapper<BigDecimal> total = new ReadOnlyObjectWrapper<>();

total.bind(Bindings.createObjectBinding(() -> items.stream()
                        .collect(Collectors.summingDouble(LineItem::getTotal)),
                        items));

显然,Collectors.summingDouble不能工作,因为它是BigDecimal。有什么方法可以用BigDecimal做到这一点吗?

LineItem.java

public class LineItem
{
        private final SimpleObjectProperty<BigDecimal> amount;
        
        public LineItem()
        {
            this.amount = new SimpleObjectProperty<>();
        }
        
        public BigDecimal getTotal()
        {
            return this.amount.get();
        }
        
}
    

理想情况下,对属性的更改将反映在总属性中...

共有1个答案

单于耘豪
2023-03-14

要使此功能正常工作,需要进行一些更改:

  1. 您需要在<code>LineItem

    这看起来像这样:

    public class LineItem {
        private final SimpleObjectProperty<BigDecimal> amount;
        
        public LineItem()
        {
            this.amount = new SimpleObjectProperty<>();
        }
        
        public final BigDecimal getTotal()
        {
            return this.amount.get();
        }
    
        public ObjectProperty<BigDecimal> totalProperty() {
            return amount ;
        }
    
        public final void setTotal(BigDecimal total) {
            totalProperty().set(total);
        }
        
    }
    

    然后

    ObservableList<LineItem> items = FXCollections.observableArrayList(
        item -> new Observable[] {item.totalProperty()}
    );
    

    total.bind(Bindings.createObjectBinding(() -> items.stream()
             .map(LineItem::getTotal)
             .reduce(BigDecimal.ZERO, BigDecimal::add),
         items));
    

 类似资料:
  • 问题内容: 我如何用对象填充ArrayList,而内部的每个对象都不相同? 问题答案:

  • 问题内容: 如何在Python中创建对象(类实例)列表? 还是这是不良设计的结果?我需要这个原因是因为我有不同的对象,并且需要在以后的阶段中处理它们,所以我将继续将它们添加到列表中,然后再调用它们。 问题答案: 存储对象实例列表非常简单

  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 问题内容: 我有一个JavaScript对象,例如 如何获取此对象中键的长度和列表? 问题答案: var obj = {

  • 我试图实现一个使用Spring Boot的客户机,它将从一个站点获取所有产品并将它们存储在数据库中。储存部分已经处理好了,但我很难找到所有产品的清单。当用Postman测试时,我可以用这样的身体得到响应:

  • 我正在使用Guice开发一个小型web框架。我有一个Router对象,一旦初始化,它就会公开一个getControllerClasses()方法。我必须循环所有这些动态返回的类,以使用Guice绑定它们。 我绑定路由器: 但是,我如何在一个模块中获得绑定的路由器实例,以便也可以绑定其getControllerClasses()方法返回的类? 我能够在模块中获取路由器实例的唯一方法是,将该实例绑定到