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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
| /**
* 高級合併應用:資料聚合和統計分析
*/
public class AdvancedMergeExample {
/**
* 統計資料合併:累加計數器
*/
public static Map<String, Integer> mergeCounters(List<Map<String, Integer>> counterMaps) {
Map<String, Integer> result = new HashMap<>();
for (Map<String, Integer> counterMap : counterMaps) {
for (Map.Entry<String, Integer> entry : counterMap.entrySet()) {
result.merge(entry.getKey(), entry.getValue(), Integer::sum);
}
}
return result;
}
/**
* 字串合併:拼接文字
*/
public static Map<String, String> mergeMessages(Map<String, String> base,
Map<String, String> additional) {
Map<String, String> result = new HashMap<>(base);
for (Map.Entry<String, String> entry : additional.entrySet()) {
result.merge(entry.getKey(), entry.getValue(), (old, new_) -> old + "; " + new_);
}
return result;
}
/**
* 複雜對象合併:銷售資料聚合
*/
public static class SalesData {
private double revenue;
private int quantity;
public SalesData(double revenue, int quantity) {
this.revenue = revenue;
this.quantity = quantity;
}
public SalesData merge(SalesData other) {
return new SalesData(this.revenue + other.revenue, this.quantity + other.quantity);
}
public double getAveragePrice() {
return quantity > 0 ? revenue / quantity : 0;
}
@Override
public String toString() {
return String.format("SalesData{revenue=%.2f, quantity=%d, avgPrice=%.2f}",
revenue, quantity, getAveragePrice());
}
// getter 和 setter
public double getRevenue() { return revenue; }
public int getQuantity() { return quantity; }
}
public static Map<String, SalesData> mergeSalesData(List<Map<String, SalesData>> salesMaps) {
Map<String, SalesData> result = new HashMap<>();
for (Map<String, SalesData> salesMap : salesMaps) {
for (Map.Entry<String, SalesData> entry : salesMap.entrySet()) {
result.merge(entry.getKey(), entry.getValue(), SalesData::merge);
}
}
return result;
}
/**
* 集合合併:Set 和 List 的合併操作
*/
public static Map<String, Set<String>> mergeSets(Map<String, Set<String>> map1,
Map<String, Set<String>> map2) {
Map<String, Set<String>> result = new HashMap<>();
// 複製第一個 map
for (Map.Entry<String, Set<String>> entry : map1.entrySet()) {
result.put(entry.getKey(), new HashSet<>(entry.getValue()));
}
// 合併第二個 map
for (Map.Entry<String, Set<String>> entry : map2.entrySet()) {
result.merge(entry.getKey(), entry.getValue(), (set1, set2) -> {
Set<String> merged = new HashSet<>(set1);
merged.addAll(set2);
return merged;
});
}
return result;
}
public static void main(String[] args) {
// 測試計數器合併
List<Map<String, Integer>> counters = Arrays.asList(
Map.of("A", 10, "B", 20),
Map.of("A", 5, "C", 15),
Map.of("B", 8, "C", 12)
);
Map<String, Integer> mergedCounters = mergeCounters(counters);
System.out.println("合併後計數器: " + mergedCounters);
// 測試銷售資料合併
List<Map<String, SalesData>> salesList = Arrays.asList(
Map.of("Product1", new SalesData(1000.0, 10)),
Map.of("Product1", new SalesData(500.0, 5), "Product2", new SalesData(800.0, 8))
);
Map<String, SalesData> mergedSales = mergeSalesData(salesList);
System.out.println("合併後銷售資料:");
mergedSales.forEach((product, data) ->
System.out.println(" " + product + ": " + data));
}
}
|
留言討論