从Map <string,list <object =“”>&gt;获取每个键的List <object> (JAVA)

时间:2017-05-31 11:46:37

标签: java dictionary hashmap linkedhashmap

我需要在每个值中使用多个对象对Map的每个值进行排序,但我很难看到如何。我的地图看起来像这样:

HashMap<String, List<Carrier>> carriers_list;

我已经设置了自定义比较器来比较我的对象列表。

static class CarrierComparator implements Comparator<Carrier> {
        @Override
        public int compare(Carrier c1, Carrier c2) {
            return c1.get_name().compareTo(c2.get_name());
        }
    }

我可以像这样使用这个比较器:

List<Carrier> carrierList = getAllCarriers();
Collections.sort(carrierList, new CustomComparators.CarrierComparator());

如何获取地图中每个键的每个列表?

4 个答案:

答案 0 :(得分:4)

将所有值组合在一个大列表中:

l = []


for line in sys.stdin:
    if line == '':
        l.append([])
    else:
        new_list = [int(i) for i in line.split()]
        l.append(new_list)
        print(l)  # list works

print(l)  # list fails

您可以在同一个表达式中进行排序:

List<Carrier> values = map.values().stream()
                                   .flatMap(List::stream)
                                   .collect(Collectors.toList());

答案 1 :(得分:1)

你想要做的是围绕以下几个:

Map<Object,List<Object>> multimap = new HashMap<>();
    multimap.values().stream()                     // stream the values
    .flatMap(List::stream)                         // stream on the items in every list
    .sorted(CarrierComparator::compare)            // use your comparator
    .collect(Collectors.toList());                 // collect in a single List

答案 2 :(得分:1)

您可以迭代地图的值:

CustomComparators.CarrierComparator comparator = new CustomComparators.CarrierComparator();
for (List<Carrier> l : carriers_list.values())
    Collections.sort(l, comparator);

答案 3 :(得分:0)

这是一个基本代码,展示了如何将所有Carrier对象提取到一个列表中,然后对它们进行排序。

Set<String> keys = map.keySet();
    List<Carrier> carriers = new ArrayList<Carrier>();
    for (String key : keys) {
        List<Carrier> temp = map.get(key);
        for (Carrier carrier : temp) {
            carriers.add(carrier);
        }
    }
    carriers.sort(new CarrierComparator());

&#34;载体&#34;将包含已排序的对象列表。

相关问题