从一个包含知识点和问题列表的 Map 中,按照问题数量倒序和知识点创建时间倒序进行排序,取出前面排名靠前的若干个知识点,并将它们的键值(即知识点的 ID)存储在一个列表中返回
时间: 2024-03-04 20:48:17 浏览: 51
好的,可以使用下面的代码实现:
```
List<Integer> topKeys = knowledgeProblemMap.entrySet().stream()
.sorted(Comparator.comparingInt((Map.Entry<Integer, List<Integer>> entry) -> entry.getValue().size())
.thenComparing((a, b) ->
knowledgeCreateDateMap.get(b.getKey()).compareTo(knowledgeCreateDateMap.get(a.getKey()))
).reversed())
.limit(knowledgeCount)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
```
这个代码和之前的代码唯一的区别在于对 `thenComparing` 函数的修改,将时间比较的结果倒序排列即可。
相关问题
如何给List<Map<String, Object>>按照里边的时间倒序排序
可以使用Java 8的Stream API和Comparator来对List<Map<String, Object>>进行时间倒序排序。假设Map中存储时间的key为"timestamp",可以按照以下方式实现:
```java
List<Map<String, Object>> list = ... // 初始化List<Map<String, Object>>
list.sort(Comparator.comparingLong(m -> (long) m.get("timestamp")).reversed());
```
以上代码中,我们首先使用`Comparator.comparingLong()`方法创建一个比较器,该比较器根据Map中的"timestamp"值进行比较。然后,我们使用`reversed()`方法将比较器反转,从而实现倒序排序。最后,我们使用`sort()`方法对List进行排序。
使用stream流对List<Map<String,Object>>进行倒序排序
可以使用Java 8的Stream API来对List<Map<String, Object>>进行倒序排序。具体实现步骤如下:
1. 将List转换成Stream。
2. 使用Stream的sorted方法,结合Comparator.reverseOrder()实现倒序排序。
3. 将排序后的Stream转换回List。
示例代码如下:
```java
List<Map<String, Object>> list = new ArrayList<>();
// 假设list已经被初始化并填充了数据
List<Map<String, Object>> sortedList = list.stream()
.sorted(Comparator.comparingInt(map -> (int) map.get("id")).reversed())
.collect(Collectors.toList());
```
上述代码中,假设Map中有一个名为"id"的键值对,值为整数类型,我们按照"id"的值进行倒序排序。如果要按照其他键进行排序,只需要将"id"替换成相应的键即可。