【发布时间】:2019-04-17 03:39:56
【问题描述】:
我正在尝试根据特定字段的总和应小于“x”的条件将列表划分为多个子列表。以下是相同的代码:
public class TestGrouping {
public static class Transaction{
String txnId;
String comment;
Amount amount;
public Transaction(String txnId, String comment, Amount amount) {
this.txnId = txnId;
this.comment = comment;
this.amount = amount;
}
}
public static class Amount{
String amountValue;
public Amount(String amountValue) {
this.amountValue = amountValue;
}
}
public static void main(String[] args) {
List<Transaction> transactionList = new ArrayList<>();
Transaction txn1 = new Transaction("T1","comment1",new Amount("81"));
Transaction txn2 = new Transaction("T2","comment2",new Amount("5"));
Transaction txn3 = new Transaction("T3","comment3",new Amount("12"));
Transaction txn4 = new Transaction("T4","comment4",new Amount("28"));
transactionList.add(txn1);
transactionList.add(txn2);
transactionList.add(txn3);
transactionList.add(txn4);
//below is what i thought might work
// transactionList.stream().collect(groupingBy (r->Collectors.summingInt(Integer.valueOf(r.amount.amountValue)),Collectors.mapping(t -> t, toList())));
}
目标是将事务列表拆分为 2 个(或更多)子列表 - 其中“金额”的总和小于 100。所以我可以有一个只有 txn1 的子列表 - 金额为 81;另一个子列表有 txn2、txn3、txn4(因为这些总和小于 100)。其他可能性是 - 让 sublist1 具有 txn1、txn2、txn3;和另一个只有 txn4 的子列表。基本上不尝试创建最“最佳”的列表,只是数量总和应小于 100。
有什么线索吗?
【问题讨论】:
-
因为你依赖于“下一个”元素,这只是一个自定义收集器的两倍 - 其中
accumulator不会与你在普通循环中所做的有很大不同;而combiner会更有趣-但仍然很琐碎
标签: java-8 java-stream collectors