繁体   English   中英

Java:用流汇总数据

[英]Java: summarize data with streams

是否可以用流汇总值? 例如,我有一个 class 数据集,它将我的 csv 文件分成包含值的行:

{customer=Max , articlenr=1234, paid=12}
{customer=Lisa , articlenr=21, paid=20}
{customer=Max , articlenr=19, paid=100}

现在我想创建一个带有 Stream 的列表,它给我一个我的客户列表(没有其他值),按他们曾经支付的总和排序(在这个例子中,Max 支付了 112 和 Lisa 20)。 所以我希望 Max 在 List 和 Lisa 中排名第一。

paid的总和收集到Map<String, Integer> ,然后 stream 条目,按支付的相反顺序对它们进行排序,然后将键收集到List

List<MyClass> records; // your list

List<String> customers = records.stream()
        .collect(groupingBy(MyClass::getCustomer, Collectors.summingInt(MyClass::getPaid)))
        .entrySet().stream()
        .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
        .map(Map.Entry::getKey)
        .collect(toList());

对的,这是可能的:

public class Customer {
    private String name;
    private int articlenr;
    private int paid;
}

现在,您可以像这样使用来获取名称列表,按支付的总金额排序:

List<String> names = customerList.stream().sorted(Comparator.comparing(Customer::getPaid)).map(Customer::getName).collect(Collectors.toList());

在这里,我写了一篇关于如何使用 Streams 和更多示例的文章: http://petrepopescu.tech/2021/01/simple-collection-manipulation-in-java-using-lambdas/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM