Método de clasificación de mapas
1.
TreeMap<String,Double> treeMap = new TreeMap<> ();
treeMap.put("aaa",20d);
treeMap.put("aaa",10d);
TreeMap<String,Double> orderByValue=new TreeMap<String,Double>(
new Comparator<String>() {
public int compare(String key1, String key2) {
int result = treeMap.get(key2).compareTo(treeMap.get(key1));
//先比较value再比较key
if (result == 0) {
result = key1.compareTo(key2);
}
return result;
}
}
);
orderByValue.pushAll(treeMap);
2. Llame directamente a este método para realizar la clasificación de valores de Map
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map, boolean asc)
{
Map<K, V> result = new LinkedHashMap<>();
Stream<Map.Entry<K, V>> stream = map.entrySet().stream();
if (asc) //升序
{
stream.sorted(Map.Entry.<K, V>comparingByValue())
.forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
}
else //降序
{
stream.sorted(Map.Entry.<K, V>comparingByValue().reversed())
.forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
}
return result;
}
3. Si el valor del mapa es un objeto, cómo ordenar según las propiedades del objeto
package com.zhw.primary01.model;
import lombok.Getter;
import lombok.Setter;
/**
* @Description
* @Author Ice丶cola
* @date 2020.05.19
*/
@Setter
@Getter
public class User implements Comparable<User>{
private String name; //姓名
private double age; // 年龄
private double id;
public User(String name, double age, double id) {
this.name = name;
this.age = age;
this.id = id;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
@Override
public int compareTo(User user) {
return Double.valueOf(user.getAge()+user.getId()).compareTo(this.getAge()+this.getId());
}
}