java 排序用法

我爱海鲸 2025-02-19 11:46:29 暂无标签

简介Comparator、sort、Collections

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class DataField {
    private String name;
    private String dataLevel;

    public DataField(String name, String dataLevel) {
        this.name = name;
        this.dataLevel = dataLevel;
    }

    public String getName() {
        return name;
    }

    public String getDataLevel() {
        return dataLevel;
    }

    @Override
    public String toString() {
        return "DataField{" +
                "name='" + name + '\'' +
                ", dataLevel='" + dataLevel + '\'' +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<DataField> dataFields = new ArrayList<>();
        dataFields.add(new DataField("userId", "其他"));
        dataFields.add(new DataField("userName", "2级"));
        dataFields.add(new DataField("password", "4级"));
        dataFields.add(new DataField("email", "1级"));
        dataFields.add(new DataField("phone", "3级"));

        // 定义优先级
        java.util.Map<String, Integer> priorityMap = new java.util.HashMap<>();
        priorityMap.put("4级", 4);
        priorityMap.put("3级", 3);
        priorityMap.put("2级", 2);
        priorityMap.put("1级", 1);
        priorityMap.put("其他", 0);

        // 使用Comparator进行排序
        Collections.sort(dataFields, new Comparator<DataField>() {
            @Override
            public int compare(DataField df1, DataField df2) {
             if (priorityMap.get(df2.getDataLevel()) == null || priorityMap.get(df1.getDataLevel()) == null) {
                            return 0;
                        }
                return priorityMap.get(df2.getDataLevel()) - priorityMap.get(df1.getDataLevel());
            }
        });

        // 输出排序后的结果
        for (DataField df : dataFields) {
            System.out.println(df);
        }
    }
}
  1. DataField 类:表示每个字段的信息,包含字段名称 (name) 和数据定级 (dataLevel)。

  2. priorityMap:定义了一个优先级映射,将每个数据定级映射到一个整数,表示其优先级。

  3. Comparator:使用 Collections.sort 方法对 dataFields 列表进行排序。排序规则是根据 dataLevel 的优先级从高到低排序。

  4. 输出结果:排序后,最高级别的字段会排在列表的第一个位置。

输出:
DataField{name='password', dataLevel='4级'}
DataField{name='phone', dataLevel='3级'}
DataField{name='userName', dataLevel='2级'}
DataField{name='email', dataLevel='1级'}
DataField{name='userId', dataLevel='其他'}

在这个例子中,password 字段的数据定级是 4级,因此它被排在了第一个位置。

你好:我的2025