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

流中元素的属性总和[重复]

屠建本
2023-03-14

我想总结我的对象的属性。对象有这样的结构:

class Foo{
   String name;
   int = price;
   int = fees;
   //etc
}

我已经将它们收集到一个列表中,并希望(使用streams)得到一个所有元素的列表,其中只包含名称以及价格和费用的总和。例如:

{name=Apple, price=2; fees=1}
{name=Potato, price=7, fees=10}
{name=strawberry, price=5, fees=4}

应导致以下结果:

{name=Apple, sum=3}
{name=Potato, sum=17}
{name=strawberry, sum=9}

共有2个答案

卢作人
2023-03-14

机具类别条形图:

class Bar {
    String name;
    int sum;

    // mapping constructor
    public Bar(Foo foo) {
        this.name = foo.name;
        this.sum = foo.price + foo.fees;
    }
}

并使用对构造函数的引用重新映射Foo:

List<Bar> sums = listFoos.stream().map(Bar::new).collect(Collectors.toList());

可以实现具有相同功能的方法,而不是构造函数。

如果需要将多个Foo实例汇总到单个条形图中,可以在条形图中添加一种合并条形图的方法:

class Bar {
// ...
    public Bar merge(Bar bar) {
        this.sum += bar.sum;
        return this;
    }
}

然后,可以将条形图的集合检索为以下映射的值:

Collection<Bar> sumBars = listFoos
    .stream()
    .collect(Collectors.toMap(Foo::getName, Bar::new, Bar::merge))
    .values();
汪安宁
2023-03-14
Map<String, Integer> result = 
foos.stream()
    .collect(
        Collectors.groupingBy(
            Foo::getName, 
            Collectors.summingInt(x -> x.getPrice() + x.getFees())
        )
);

使用收集器::groupingBy和下游收集器::summingInt收集到地图。

或者您可以使用toMap

foos.stream()
    .collect(
        Collectors.toMap(
               Foo::getName,
               x -> x.getPrice() + x.getFees(),
               Integer::sum
        )
    );

如果您只需稍微阅读一下文档,就很容易做到这一点。

 类似资料:
  • Hibernate的property元素具有update、insert属性,根据文档,它声明-http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-声明属性 update,insert(可选-默认为true):指定映射列应包含在SQL update和/或insert语句中。将两者都设置为f

  • 在使用Vdt的过程中,你也许会遇到这样一个问题:设置的属性,并不能渲染出来,例如: <input maxlength="10" /> 上述例子中,设置的maxlength属性丢失了。要理解这个原因,可以看看这段介绍 Content attribute & IDL attribute, 以及Virtual-Dom文档中对VNode的介绍 Content vs IDL attribute Conte

  • 问题内容: 以下脚本使用来显示购物车。对于数组中的每个元素,它都会显示项目名称,其数量和小计()。 计算重复元素总价的最简单方法是什么? 问题答案: 在模板中 在控制器中

  • 我有一份包含订单项目列表的订单 如果在这个列表中我有以下项目 我想计算订单所有者名称相同的值之和。 e、 g.如果所有者名称为“John”,则返回417.00,如果名称为“Doe”,则返回19.00。 我怎么能通过小溪Java呢?非常感谢

  • 我有一个对象列表,如下所示,我想将它们按3个属性分组,并将第4个属性相加 我做了如下类似的事情,但它生成了许多地图,我无法得到求和的方法,因为它也需要一些逻辑 如何使用和逻辑获取分组列表列表?

  • 问题内容: 在检查Chrome Dev工具时,我注意到以下CSS片段: 可以在Chrome中完美运行(请参见下面的屏幕截图)。 这使我可以通过CSS定义标签的src属性。在Firefox中不起作用。到目前为止,我认为不可能通过CSS直接修改src属性,而且我还没有发现有人在谈论这一点。 那么,这仅仅是Chrome中的专有功能,还是Chrome正在实施W3C草案或其他我不知道的类似产品? 问题答案: