从 Map<String, List<Object>> (Java) 中获取每个键的 List<Object>
Getting the List<Object> for every key out of a Map<String, List<Object>> (Java)
我需要对每个值中包含多个对象的 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());
如何获取地图中每个键的每个列表?
你想做的是:
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
您可以迭代地图的值:
CustomComparators.CarrierComparator comparator = new CustomComparators.CarrierComparator();
for (List<Carrier> l : carriers_list.values())
Collections.sort(l, comparator);
要将所有值合并到一个大列表中:
List<Carrier> values = map.values().stream()
.flatMap(List::stream)
.collect(Collectors.toList());
您可以在同一个表达式中进行排序:
List<Carrier> values = map.values().stream()
.flatMap(List::stream)
.sorted(comparator)
.collect(Collectors.toList());
下面是一段基本代码,展示了如何将所有 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());
"carriers" 将包含排序的对象列表。
我需要对每个值中包含多个对象的 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());
如何获取地图中每个键的每个列表?
你想做的是:
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
您可以迭代地图的值:
CustomComparators.CarrierComparator comparator = new CustomComparators.CarrierComparator();
for (List<Carrier> l : carriers_list.values())
Collections.sort(l, comparator);
要将所有值合并到一个大列表中:
List<Carrier> values = map.values().stream()
.flatMap(List::stream)
.collect(Collectors.toList());
您可以在同一个表达式中进行排序:
List<Carrier> values = map.values().stream()
.flatMap(List::stream)
.sorted(comparator)
.collect(Collectors.toList());
下面是一段基本代码,展示了如何将所有 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());
"carriers" 将包含排序的对象列表。