Map<k,List<p>> a 根据a,b两个Map 取p最多的a,如果p一样多,就根据Map<key,date> b 取date时间最新的
时间: 2024-03-04 09:48:13 浏览: 84
可以使用Java 8中的Stream API来实现该需求。假设`a`和`b`两个Map的类型分别为`Map<K, List<P>>`和`Map<K, Date>`,其中`K`为Key的类型,`P`为List中元素的类型,`Date`为时间的类型,可以按照以下方式实现:
```java
K maxKey = a.keySet().stream()
.max(Comparator.comparing((K key) -> a.get(key).size())
.thenComparing((K key) -> b.get(key)))
.orElse(null); // 找到p最多的key,如果p一样多,则取时间最新的key
List<P> maxList = a.get(maxKey);
maxList.sort(Comparator.comparing(p -> b.get(maxKey)).reversed()); // 根据时间排序
P maxP = maxList.get(0); // 取时间最新的P
```
首先,使用`a.keySet().stream()`将a的key转换为Stream,然后使用`max()`方法找到p最多的key,如果p一样多,则取时间最新的key。在`Comparator.comparing()`中,首先按照List中元素数量排序,然后按照时间排序。最后将List排序,并取时间最新的元素即可。
需要注意的是,如果p最多的key对应的List中没有元素,那么`maxList.get(0)`会抛出`IndexOutOfBoundsException`异常,需要进行合理的处理。
阅读全文