Comparator.comparing()比较map
时间: 2023-11-14 07:09:29 浏览: 52
Comparator.comparing()方法可以用于比较Map中的value值。具体来说,可以使用以下代码:
```
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 2);
map.put("orange", 4);
// 按照value值从小到大排序
Map<String, Integer> sortedMap = map.entrySet()
.stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
System.out.println(sortedMap);
```
输出结果为:{banana=2, apple=3, orange=4}
在上述代码中,我们使用了`Comparator.comparing()`方法来比较Map中的value值,并将其按照从小到大的顺序排序。最后,我们使用`Collectors.toMap()`方法将排序后的结果转换为一个新的Map对象。
相关问题
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()`静态方法去掉即可。
泛型字段 使用Comparator.comparing排序
可以使用Comparator.comparing方法对泛型字段进行排序。以下是一个示例代码,其中根据Map<String, String>中name值的倒序对列表进行排序:
```java
List<Map<String, String>> list = new ArrayList<>();
// 添加元素到列表中
list.add(new HashMap<String, String>(){{put("name", "Tom");}});
list.add(new HashMap<String, String>(){{put("name", "Jerry");}});
list.add(new HashMap<String, String>(){{put("name", "Alice");}});
// 方法1:使用Comparator.comparing方法
Comparator<Map<String, String>> comparator = Comparator.comparing(
(Map<String, String> map) -> map.get("name"), Collections.reverseOrder());
list.sort(comparator);
// 输出排序后的列表
System.out.println(list);
```
输出结果为:
```
[{name=Tom}, {name=Jerry}, {name=Alice}]
```