list.stream().sorted(Comparator.comparing(map -> map.get("acceptTime")).reversed());
时间: 2024-05-28 19:10:17 浏览: 10
这是一个Java 8中的Stream操作,对一个List中的Map元素按照其中一个键对应的值进行排序,同时支持排序结果的反转。具体来说,这段代码的作用是按照List中每个Map元素中键为"acceptTime"的值进行排序,并将结果反转。其中,Comparator.comparing()方法会返回一个Comparator对象,该对象会根据指定键的值进行比较;reversed()方法则会返回一个与原来相反的排序结果。
相关问题
Map<String, Map<String, List<String>>> tag2AllFunds = Maps.newHashMap(); Comparator comparator = Collator.getInstance(Locale.CHINA); tag2AllFunds.forEach((key,value) ->{ value.keySet().stream() .sorted(Comparator.comparing(k -> value.get(k).size()).reversed().thenComparing(comparator)) .collect(Collectors.toMap( en -> value.get(en), Map.Entry::getValue)); }); 修改正确这段代码
这段代码有一些问题,因为在 `collect` 方法中使用了 `en -> value.get(en)`,这是错误的,因为它应该返回键而不是值。另外,`toMap` 方法需要指定一个合并函数,因为在排序后可能会有重复的键。正确的代码如下:
```
Map<String, Map<String, List<String>>> tag2AllFunds = Maps.newHashMap();
Comparator<String> comparator = Collator.getInstance(Locale.CHINA);
tag2AllFunds.forEach((key, value) -> {
value.entrySet().stream()
.sorted(Comparator.comparing((Map.Entry<String, List<String>> entry) -> entry.getValue().size())
.reversed()
.thenComparing(Map.Entry.comparingByKey(comparator)))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
});
```
这里我们使用了 `entrySet` 方法来获取键值对,然后使用 `Map.Entry` 的 `comparingByKey` 方法来按键排序。在 `toMap` 方法中,我们使用了一个合并函数,它将两个值合并为一个。此外,我们还使用了一个 `LinkedHashMap` 来保留顺序。
debtBuyerByMainBuyerId.stream() .filter(map -> !Objects.equals(MapUtils.getInteger(map, "buyerId"), mainBuyerId)) .sorted(Comparator.comparing(map -> (BigInteger) MapUtils.getObject(map, "maxDebtDay"))) 实现倒序或正序
要实现倒序或正序,可以使用`reversed()`方法或`Comparator.reverseOrder()`静态方法。例如,要按照最大欠款天数从大到小排序,可以这样写:
```
debtBuyerByMainBuyerId.stream()
.filter(map -> !Objects.equals(MapUtils.getInteger(map, "buyerId"), mainBuyerId))
.sorted(Comparator.comparing(map -> (BigInteger) MapUtils.getObject(map, "maxDebtDay")).reversed())
```
或者这样写:
```
debtBuyerByMainBuyerId.stream()
.filter(map -> !Objects.equals(MapUtils.getInteger(map, "buyerId"), mainBuyerId))
.sorted(Comparator.comparing(map -> (BigInteger) MapUtils.getObject(map, "maxDebtDay"), Comparator.reverseOrder()))
```
这两种写法都可以将排序结果倒序输出。如果要正序排序,可以将`reversed()`方法或`Comparator.reverseOrder()`静态方法去掉即可。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)