任何方式使用Java 8Java來收集轉換成一個鍵多個值映射
final Map<String, Collection<ProductStrAttributeOverrideRulesModel>> attributeRulesMap = new HashMap<String, Collection<ProductStrAttributeOverrideRulesModel>>();
for (final ProductStrAttributeOverrideRulesModel rule : rules)
{
final String key = rule.getProductStrAttributeOverride().getProductStrTypeField().getAttributeDescriptorQualifier();
if (attributeRulesMap.containsKey(key))
{
final Collection<ProductStrAttributeOverrideRulesModel> currentRules = attributeRulesMap.get(key);
currentRules.add(rule);
}
else
{
final Collection<ProductStrAttributeOverrideRulesModel> list = new LinkedList<ProductStrAttributeOverrideRulesModel>();
list.add(rule);
attributeRulesMap.put(key, list);
}
}
執行下面的代碼,如果它僅僅是
final Map<String, ProductStrAttributeOverrideRulesModel> attributeRulesMap
比我可以這樣做以下8路但我需要根據關鍵字將整個集合安排在地圖中,並且每個關鍵字可以具有存儲在集合中的多個值。
Map<String, ProductStrAttributeOverrideRulesModel> result =
choices.stream().collect(Collectors.toMap(ProductStrAttributeOverrideRulesModel::getProductStrAttributeOverride.getProductStrTypeField.getAttributeDescriptorQualifier,
Function.identity()));
對於Java 8之前的代碼,這有點反模式。你可以簡單地使用兩個地圖查找('containsKey'和'get')。這使得代碼可能慢很多。 –
你提到了一個好點的鮑里斯。非常感謝。 –
@BoristheSpider如果有一對'(「something」,null)','containsKey(「something」)'將返回'true',但get(「something」)'將返回'null' - 結果相同彷彿根本沒有這樣的鑰匙。 –