准备多值国家地图

prepare a multi valued country map

我想准备 HashMap 这样

Key   :  Country Code
Value :  List of returned orderEntries  

以下过程数据方法每 5 个 orderEntry 处理一次,可以来自任何国家。

让我说得更清楚。我有来自不同国家/地区的 orderEntries 列表,现在我想根据国家键将这些条目放入 map 中。就像如果来自 US 的 20 个条目,那么 US 将是键,而 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);

            }

        }

    }

所以你正在寻找一个包含链表的哈希图 类似于:

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;
}

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

只需创建一个 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);
            }
        }

这个需要根据你的东西修改

But problem is that I don't want to create a list for each county inside map.

我理解你的问题,但是 map 存储唯一 key,你不能存储相同的国家代码。

您必须使用 Map<String, List<String>>() 将您的 country code 保存为 key,然后将您的值放入 List<String>.

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

您可以使用 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);