Java。 groupingBy 扔到 类
Java. groupingBy throw to classes
我无法编写一个收集器来计算每个帐户(即按帐号)的交易总额(长型,而不是整数)。收集器将应用于交易流。
如何为这个链交易使用groupingBy -> Account -> Number ?
class TransactionCollector {
public static Map<String, Long> getAccount2TransSum(List<Transaction> trans) {
return trans.stream().collect( // place code here
}
static class Transaction {
private final String uuid;
private final Long sum;
private final Account account;
public Transaction(String uuid, Long sum, Account account) {
this.uuid = uuid;
this.sum = sum;
this.account = account;
}
public String getUuid() {
return uuid;
}
public Long getSum() {
return sum;
}
public Account getAccount() {
return account;
}
@Override
public String toString() {
return "Transaction{" +
"uuid='" + uuid + '\'' +
", sum=" + sum +
'}';
}
}
static class Account {
private final String number;
private final Long balance;
public Account(String number, Long balance) {
this.number = number;
this.balance = balance;
}
public String getNumber() {
return number;
}
public Long getBalance() {
return balance;
}
@Override
public String toString() {
return "Account{" +
"number='" + number + '\'' +
", balance=" + balance +
'}';
}
}
}
您可以使用下游收集器
trans.stream().collect(
groupingBy(
Transaction::getAccount,
groupingBy(Account::getNumber)
)
)
这将首先按帐户对交易进行分组,然后按编号分组
编辑:
看起来你真的想要 toMap
收集器
trans.stream().collect(
toMap(
t -> t.getAccount().getNumber(),
t -> t.getSum()
)
)
您可以将 groupingBy
与 summingLong
收集器一起使用来对事务进行分组并计算它们的总和。
trans.stream()
.collect(Collectors.groupingBy(
transaction -> transaction.getAccount().getNumber(),
Collectors.summingLong(Transaction::getSum)))
因此,您将得到一个 Map<String, Long>
,其中键是帐号,值是该帐号所有交易的总和。
我无法编写一个收集器来计算每个帐户(即按帐号)的交易总额(长型,而不是整数)。收集器将应用于交易流。 如何为这个链交易使用groupingBy -> Account -> Number ?
class TransactionCollector {
public static Map<String, Long> getAccount2TransSum(List<Transaction> trans) {
return trans.stream().collect( // place code here
}
static class Transaction {
private final String uuid;
private final Long sum;
private final Account account;
public Transaction(String uuid, Long sum, Account account) {
this.uuid = uuid;
this.sum = sum;
this.account = account;
}
public String getUuid() {
return uuid;
}
public Long getSum() {
return sum;
}
public Account getAccount() {
return account;
}
@Override
public String toString() {
return "Transaction{" +
"uuid='" + uuid + '\'' +
", sum=" + sum +
'}';
}
}
static class Account {
private final String number;
private final Long balance;
public Account(String number, Long balance) {
this.number = number;
this.balance = balance;
}
public String getNumber() {
return number;
}
public Long getBalance() {
return balance;
}
@Override
public String toString() {
return "Account{" +
"number='" + number + '\'' +
", balance=" + balance +
'}';
}
}
}
您可以使用下游收集器
trans.stream().collect(
groupingBy(
Transaction::getAccount,
groupingBy(Account::getNumber)
)
)
这将首先按帐户对交易进行分组,然后按编号分组
编辑:
看起来你真的想要 toMap
收集器
trans.stream().collect(
toMap(
t -> t.getAccount().getNumber(),
t -> t.getSum()
)
)
您可以将 groupingBy
与 summingLong
收集器一起使用来对事务进行分组并计算它们的总和。
trans.stream()
.collect(Collectors.groupingBy(
transaction -> transaction.getAccount().getNumber(),
Collectors.summingLong(Transaction::getSum)))
因此,您将得到一个 Map<String, Long>
,其中键是帐号,值是该帐号所有交易的总和。