准备一张多值国家地图

时间:2015-02-09 08:59:58

标签: java hashmap

我想以这样的方式准备HashMap

Key   :  Country Code
Value :  List of returned orderEntries  

以下流程数据方法流程每5 orderEntry可以来自任何国家/地区。

让我说清楚一点。我有来自不同国家/地区的orderEntries列表,现在我想根据国家/地区密钥将这些条目放入map。比如,来自US然后US的20个条目将成为关键,而20个条目将成为值。但问题是我不想为map内的每个县创建一个列表。

public void processSegmentData(final List resultSet)
    {

        for (final Object orderEntry : resultSet)
        {
            if (orderEntry instanceof OrderEntryModel)
            {
                String countryCode = null;

                final OrderModel order = ((OrderEntryModel) orderEntry).getOrder();

                if (order.getDeliveryAddress() != null)
                {
                    countryCode = order.getDeliveryAddress().getCountry().getIsocode();
                }


                orderEntriesMap.put(Config.getParameter(countryCode+".return.pid"), orderEntries);

            }

        }

    }

4 个答案:

答案 0 :(得分:1)

所以你是在一个包含链表的hashmap之后的东西:

public HashMap<String, LinkedList<OrderEntryModel>> processSegmentData(final List resultSet) {
    HashMap<String, LinkedList<OrderEntryModel>> orderEntriesMap = new HashMap<String, LinkedList<OrderEntryModel>>();

    for (final Object orderEntry : resultSet) {
        if (orderEntry instanceof OrderEntryModel) {
            String countryCode = null;

            final OrderModel order = ((OrderEntryModel) orderEntry).getOrder();

            if (order.getDeliveryAddress() != null) {
                countryCode = order.getDeliveryAddress().getCountry().getIsocode();
            }
            if (!orderEntriesMap.containsKey(countryCode)) {
                orderEntriesMap.put(countryCode, new LinkedList<OrderEntryModel>());
            }
            orderEntriesMap.get(countryCode).add((OrderEntryModel) orderEntry);                

        }

    }
    return orderEntriesMap;
}

将基于您提供的猜测对象名称的源代码示例。

答案 1 :(得分:1)

只需创建一个Map<String,List<String>>。并遵循以下方法

Map<String,List<String>> countryMap = new HashMap<String, List<String>>();
        for (final String orderEntry : orders){
            if(countryMap.containsKey(orderEntry.getCountry())){
                countryMap.get(orderEntry.getCountry()).add(orderEntry);
            }else{
                //create a new list and add orderEntry
                countryMap.put(orderEntry.getCountry(),orderEntry);
            }
        }

你需要根据你的东西修改它

答案 2 :(得分:1)

  

但问题是我不想为每个县创建一个列表   在地图内。

我了解您的问题,但map存储了唯一的key,您无法存储相同的国家/地区代码。

您必须使用Map<String, List<String>>()country code作为key,然后将您的值放在List<String>内。

执行此操作后如果您遇到任何问题,编辑您的问题将有助于您解决此问题。

答案 3 :(得分:0)

您可以使用Guava's Multimap来简化操作。 Multimap允许您针对单个密钥存储多个条目,例如:

Multimap<String, OrderEntry> orderEntriesMultimap = HashMultimap.create();

for (final Object orderEntry : resultSet) {       
    // omitted...
    orderEntriesMultimap.put(Config.getParameter(countryCode+".return.pid"), orderEntry);
}

然后,您可以按键检索所有关联的值:

Collection<OrderEntryModel> entries = orderEntriesMultimap.get(key);