我有一张清单,傻瓜
class Foo {
private String category;
private int amount;
private int price;
... constructor, getters & setters
}
我想按类别分组,然后合计金额和价格。
Map<Foo, List<Foo>> map = new HashMap<>();
Map<String, List<Foo>> map = fooList.stream().collect(groupingBy(Foo::getCategory()));
现在我只需要用一个保存汇总的金额和价格的Foo对象替换String键。这就是我被困住的地方。我好像找不到办法。
有点难看,但应该管用:
list.stream().collect(Collectors.groupingBy(Foo::getCategory))
.entrySet().stream()
.collect(Collectors.toMap(x -> {
int sumAmount = x.getValue().stream().mapToInt(Foo::getAmount).sum();
int sumPrice= x.getValue().stream().mapToInt(Foo::getPrice).sum();
return new Foo(x.getKey(), sumAmount, sumPrice);
}, Map.Entry::getValue));
我可以同时使用和吗?
问题内容: 我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 使用 让我得到正在寻找的完美数据。但是,我想对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian 问题答案: 在所有版本的MySQL中,只需在SELECT列表中为聚
我不认为这叫做“分组”,但我需要做到以下几点:我有课 我有一些人: 父亲= 所以,每个人都可以是多个类别的一部分。我想得到以下映射: 现在,我可以手动迭代每个人,并将他们放到
问题内容: 我希望能够从电子邮件表中选择一堆行并按发件人分组。我的查询如下所示: 该查询几乎可以按我希望的方式工作-它选择按电子邮件分组的记录。问题在于主题和时间戳记与特定电子邮件地址的最新记录不符。 例如,它可能返回: 当数据库中的记录是: 如果“编程问题”主题是最新的,那么在对电子邮件进行分组时如何使MySQL选择该记录? 问题答案: 一个简单的解决方案是将查询包裹与ORDER语句子选择 第一
我正在使用DatabaseClient执行sql查询,我不知道如何通过以下方式进行分组:
我有这样的想法: 我怎么能把它写在一个流中呢?收集f.e.