這是我必須使用的:
Map<Faction, List<Resource>>
- Faction 是玩家派系的列舉字串值(例如“rr”代表團隊紅色,“bb”代表團隊藍色)
- 資源是資源的字串列舉值,例如“羊毛”、“木材”
所以串列現在看起來像這樣:
("rr", "wool")
("rr", "wool")
("rr", "lumber")
("bb", "wool")
所以我的目標是擁有一個 Map<Resource, Integer>
- 其中 Resource 是列舉中資源的字串名稱
- Integer代表資源卡的數量
目標包含值的示例: ("Wool", 4), ("Grain", 3), ("Lumber", 2)
所以我試圖這樣做(在偽代碼中):
- 提取屬于
Faction“rr”的所有資源并將它們放入一個地圖中<Resources, Integer>,其中每種資源型別應表示一次并Integer表示Resource卡片數量的總和--> 對另外 3 個玩家重復此步驟Faction
我玩過流和 foreach 回圈,但還沒有產生有價值的代碼,因為我在構思階段還很掙扎。
uj5u.com熱心網友回復:
看起來實際輸入資料Map<Faction, List<Resource>>看起來像:
{rr=[wool, wool, lumber], bb=[lumber, wool, grain]}
假設適當的列舉用于Resourceand Faction,可以使用flatMap輸入映射中的值檢索資源到其數量的映射:
Map<Faction, List<Resource>> input; // some input data
Map<Resource, Integer> result = input
.values() // Collection<List<Resource>>
.stream() // Stream<List<Resource>>
.flatMap(List::stream) // Stream<Resource>
.collect(Collectors.groupingBy(
resource -> resource,
LinkedHashMap::new, // optional map supplier to keep insertion order
Collectors.summingInt(resource -> 1)
));
或者Collectors.toMap可以應用:
...
.collect(Collectors.toMap(
resource -> resource,
resource -> 1,
Integer::sum, // merge function to summarize amounts
LinkedHashMap::new // optional map supplier to keep insertion order
));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370421.html
