簡體   English   中英

使用多個HashMap檢索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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM