在java中,在List<LIst<实体类>>中,拿到List<实体类>中某个最大值的字段,与其他List最大值进行比较,获取前三个LIst<实体类>
时间: 2024-03-27 07:40:31 浏览: 68
好的,针对你的问题,我可以给出以下Java代码实现:
```java
// 假设你要比较的字段为实体类的一个整型属性,属性名为value
// 假设你要获取前三个List<实体类>
public List<List<Entity>> getTopThreeLists(List<List<Entity>> lists) {
PriorityQueue<List<Entity>> queue = new PriorityQueue<>(3, (a, b) -> {
int aMax = a.stream().mapToInt(Entity::getValue).max().orElse(Integer.MIN_VALUE);
int bMax = b.stream().mapToInt(Entity::getValue).max().orElse(Integer.MIN_VALUE);
return Integer.compare(aMax, bMax);
});
for (List<Entity> list : lists) {
int max = list.stream().mapToInt(Entity::getValue).max().orElse(Integer.MIN_VALUE);
if (queue.size() < 3 || max > queue.peek().stream().mapToInt(Entity::getValue).max().orElse(Integer.MIN_VALUE)) {
queue.offer(list);
}
if (queue.size() > 3) {
queue.poll();
}
}
List<List<Entity>> result = new ArrayList<>(3);
while (!queue.isEmpty()) {
result.add(0, queue.poll());
}
return result;
}
```
这段代码使用一个优先队列来维护前三个最大的List<实体类>,并且在每次遍历到一个新的List<实体类>时,先比较该List<实体类>中的最大值和当前前三个最大List<实体类>中的最小值,如果该List<实体类>中的最大值比当前前三个最大List<实体类>中的最小值还要大,就把该List<实体类>加入到优先队列中。最后,从优先队列中取出前三个List<实体类>即可。
阅读全文