Repository navigation
Expand file tree
/
Copy pathGroupingTransactions.java
More file actions
71 lines (63 loc) · 2.53 KB
/
Copy pathGroupingTransactions.java
File metadata and controls
71 lines (63 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.lianglliu.java8.collectors.usage;
import com.lianglliu.java8.collectors.model.Currency;
import com.lianglliu.java8.collectors.model.Transaction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupingTransactions {
public static List<Transaction> transactions = Arrays.asList(
new Transaction(Currency.EUR, 1500.0),
new Transaction(Currency.USD, 2300.0),
new Transaction(Currency.GBP, 9900.0),
new Transaction(Currency.EUR, 1100.0),
new Transaction(Currency.JPY, 7800.0),
new Transaction(Currency.CHF, 6700.0),
new Transaction(Currency.EUR, 5600.0),
new Transaction(Currency.USD, 4500.0),
new Transaction(Currency.CHF, 3400.0),
new Transaction(Currency.GBP, 3200.0),
new Transaction(Currency.USD, 4600.0),
new Transaction(Currency.JPY, 5700.0),
new Transaction(Currency.EUR, 6800.0)
);
public static void main(String[] args) {
groupImperatively();
groupFunctionally();
}
/**
* <pre> {@code
* var transactionsForCurrency =
* transactionsByCurrencies.get(currency);
* if(transactionsForCurrency ==null)
* {
* transactionsForCurrency = new ArrayList<>();
* transactionsByCurrencies.put(currency, transactionsForCurrency);
* }
* transactionsForCurrency.add(transaction);
*
* 等价于 ==>>
*
* var transactionsForCurrency =
* transactionsByCurrencies.computeIfAbsent(currency, k -> new ArrayList<>());
* transactionsForCurrency.add(transaction);
* }</pre>
*/
private static void groupImperatively() {
Map<Currency, List<Transaction>> transactionsByCurrencies = new HashMap<>();
for (Transaction transaction : transactions) {
Currency currency = transaction.getCurrency();
var transactionsForCurrency =
transactionsByCurrencies.computeIfAbsent(currency, k -> new ArrayList<>());
transactionsForCurrency.add(transaction);
}
System.out.println(transactionsByCurrencies);
}
private static void groupFunctionally() {
Map<Currency, List<Transaction>> transactionsByCurrencies = transactions.stream()
.collect(Collectors.groupingBy(Transaction::getCurrency));
System.out.println(transactionsByCurrencies);
}
}