Problema de clasificación de mapas

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());
    }
}

Supongo que te gusta

Origin blog.csdn.net/Ice__cola/article/details/106813564
Recomendado
Clasificación