我需要在每个值中使用多个对象对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());
如何获取地图中每个键的每个列表?
答案 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;将包含已排序的对象列表。