簡體   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