[英]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.