[英]Sorting List of lists/ Arraylists/ Hashmaps with multiple values in Java
[英]Using multiple HashMaps to retrieve values in Java
考慮兩個HashMap
。 第一個包含產品名稱和產品類別代碼,分別作為鍵和值。 第二個HashMap
包含產品名稱和出售的單位。 我需要編寫一個Java函數來接受兩個哈希映射,並返回每個類別中產品銷量最高的產品名稱。
Input1 :{“lux”:”soap”,”colgate”:”paste”, ”pears”:”soap”,”sony”:”electronics”,”samsung”:”electronics”}
Input 2:{“lux”:1000,”colgate”:500,”pears”:2000,”sony”:100,” samsung”,600}
Output: {“pears”,”colgate”,”samsung”}
基本上,我將持有一張從類別到最受歡迎商品的地圖及其櫃台。 您可以使用兩個單獨的Map
來執行此操作,可以快速而骯臟的類來保存信息,也可以使用Apache Commons Lang的Pair類之類的東西 。 在不依賴任何第三方的情況下,我只需定義一個簡單的類,如下所示:
public class Item {
String name;
int amount;
// constructor from name, amount
// getters and setters
}
現在,您可以遍歷銷售地圖並僅保存每個類別中最受歡迎的商品:
public Set<String> getPopularItems
(Map<String, String> itemCategories,
Map<String, Integer> itemSales) {
Map<String, Item> result = new HashMap<String, Item();
for (Map.Entry<String, Integer> salesEntry: itemSales) {
String itemName = itemSales.getKey();
int itemAmount = itemSales.getValue();
String category = itemCategories.get(itemName);
if (result.contiansKey(category)) {
int currAmount = result.get(category).getAmount();
if (itemAmount > currAmount) {
result.put (category, new Item (itemName, itemAmount));
}
} else {
result.put (category, new Item (itemName, itemAmount));
}
}
return result.keySet();
}
請注意,這是一種簡化的實現,它不處理格式錯誤的輸入(例如,在一個地圖中出現但不在另一地圖中出現的類別)或邊緣情況(例如,兩個商品的銷售額相同)。 這樣做是為了清楚起見-我確信您以后可以根據需要添加這些內容。
@Arjun:答案代碼如下:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MultipleHashMapAccessDemo {
protected Map<String, String> getProductCategoryMap() {
Map<String, String> productCategoryMap = new HashMap<String, String>();
productCategoryMap.put("Lux", "Soap");
productCategoryMap.put("Pears", "Soap");
productCategoryMap.put("Dove", "Soap");
productCategoryMap.put("Colgate", "Paste");
productCategoryMap.put("Babul", "Paste");
productCategoryMap.put("Vico", "Paste");
return productCategoryMap;
}
protected Map<String, Integer> getProductUnitsSoldMap() {
Map<String, Integer> productUnitsSoldMap = new HashMap<String, Integer>();
productUnitsSoldMap.put("Lux", 1000);
productUnitsSoldMap.put("Pears", 3000);
productUnitsSoldMap.put("Dove", 3010);
productUnitsSoldMap.put("Colgate", 50);
productUnitsSoldMap.put("Babul", 45);
productUnitsSoldMap.put("Vico", 80);
return productUnitsSoldMap;
}
protected Map<String, String> getExpectedProductCategoryMap(
Map<String, String> productCategoryMap,
Map<String, Integer> productUnitsSoldMap) {
Map<String, String> expectedProductCategoryMap = new HashMap<String, String>();
Set<String> categortSet = new HashSet<String>();
Iterator iterator = productCategoryMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> mEntry = (Map.Entry) iterator.next();
categortSet.add(mEntry.getValue());
}
for (String category : categortSet) {
int tempUnits = 0;
String desiredProductName = null;
for (Object object : productUnitsSoldMap.entrySet()) {
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) object;
String product = entry.getKey();
if (category.equals(productCategoryMap.get(product))) {
if (tempUnits < entry.getValue()) {
tempUnits = entry.getValue();
desiredProductName = product;
}
}
}
expectedProductCategoryMap.put(category, desiredProductName);
}
return expectedProductCategoryMap;
}
public static void main(String... strings) {
MultipleHashMapAccessDemo accessDemo = new MultipleHashMapAccessDemo();
Map<String, String> productCategoryMap = accessDemo
.getProductCategoryMap();
Map<String, Integer> productUnitsSoldMap = accessDemo
.getProductUnitsSoldMap();
Map<String, String> expectedProductCategoryMap = accessDemo
.getExpectedProductCategoryMap(productCategoryMap,
productUnitsSoldMap);
for (Object object : expectedProductCategoryMap.entrySet()) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) object;
System.out.print("Category name is : " + entry.getValue());
System.out.println(" And Product name is : " + entry.getKey());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.