在Java中,按对象参数对映射<对象,列表<对象>>进行排序
你能帮我把这样的地图分类吗
Map<Object, List<Object>> halls = new HashMap()<>;
其中键对象的一个参数为numberOfSeats 而且整个地图应该按照最多的座位数按相反的顺序排序。 我试着用streamAPI来实现它,但似乎无法实现
比如:
halls.entrySet().stream().sorted((h1, h2) -> h1.getSeatsNumber.compareTo(h2.getSeatsNumber));
# 1 楼答案
不要使用
HashMap
,而是创建一个按键排序的TreeMap
,并提供一个自定义比较器:如果需要将
MyObject
的集合收集到地图中,可以使用Collectors.groupingBy
与TreeMap
的供应商进行此操作:# 2 楼答案
因为你明确地说你有一个
Map<Object,List<Object>>
,我将把这个限制在那个场景中首先,创建一些测试数据
现在对现有地图进行排序。要保留排序,可以使用
LinkedHashMap
来保持插入顺序。但是,新添加的项目不会被排序,而是简单地添加到末尾在这种情况下,您必须将密钥转换为实际的类名,以获得席位,因为
Object
对该方法一无所知。要反转排序,只需在Integer.compare
方法中反转e1
和e2
的顺序即可。如果您使用MyClass
作为键而不是Object
,这可能会更容易一些上面的照片
下面是包含
toString
覆盖的测试类# 3 楼答案
可以使用“按键比较”,例如:
如果你想对地图进行排序,你应该使用LinkedHashMap