Java 列表对对象字段常量值进行排序

标签 java collections

我有一个代表严重级别的枚举

public enum Severity {
    HIGH("H"), MEDIUM("M"), LOW("L");
}

Person one = new Person();
one.setSeverity(Severity.HIGH);

其他字段...

Person two = new Person();
two.setSeverity(Severity.LOW);

......

Person three = new Person();
three.setSeverity(Severity.HIGH);

List<Person> persons = Lists.newArrayList();
persons.add(one);
persons.add(two);
persons.add(three);

我想对人员列表进行排序,以按严重性字段排序(即“高”、“中”、“低”)。

对人员列表进行排序后我的预期结果应该是按高、高、低的顺序?

我可以知道如何实现这一目标吗?

注意:我正在使用 com.google.common.collect

最佳答案

尝试下面的代码

创建一个ENUM

package com.rais;

public enum Severity {
    HIGH("H"), MEDIUM("M"), LOW("L");

    private final String  value;

    private Severity(String value) {
        this.value = value;
    }



}

现在根据您的要求创建 Person 类,例如。

package com.rais;

public class Person {

    private Severity severity;
    private String name;


    public Person(Severity severity, String name) {
        super();
        this.severity = severity;
        this.name = name;
    }

    public Severity getSeverity() {
        return severity;
    }

    public void setSeverity(Severity severity) {
        this.severity = severity;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }   

}

最后创建一个测试客户端并应用以下逻辑。

package com.rais;

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

public class TestClient {

    public static void main(String[] args) {

        Person one = new Person(Severity.HIGH, "shayam");
        Person two = new Person(Severity.MEDIUM, "mohan");
        Person three = new Person(Severity.LOW, "radha");
        Person four = new Person(Severity.HIGH, "rakesh");
        Person five = new Person(Severity.MEDIUM, "kailash");
        Person six = new Person(Severity.LOW, "rais");
        Person seven = new Person(Severity.LOW, "abhishek");

        List<Person> persons = new ArrayList<Person>();
        persons.add(one);
        persons.add(two);
        persons.add(three);
        persons.add(four);
        persons.add(five);
        persons.add(six);
        persons.add(seven);

        Collections.sort(persons, new Comparator<Person>() {

            @Override
            public int compare(Person person1, Person person2) {

                if(person1.getSeverity()==person2.getSeverity())
                {
                    return person1.getName().compareTo(person2.getName());
                }
                else{
                    return person1.getSeverity().compareTo(person2.getSeverity());
                }

            }
        });

        for (Person person : persons) {
            System.out.println(person.getName()+" "+ person.getSeverity());

        }

    }

}

我确信您会得到以下输出。

rakesh HIGH
shayam HIGH
kailash MEDIUM
mohan MEDIUM
abhishek LOW
radha LOW
rais LOW

关于Java 列表对对象字段常量值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17539226/

相关文章:

c# - 优化字典键的内存要求

java - 来自 Map<T,K> 和 Map<T,V> 的跨映射 : Map<K, V> 的通用键控

c# - .NET 中的数组是否失去了意义?

java - pymemcached get 和 incr 方法给出完全不同的结果

java - 如何解决 "error: bad operand types for binary operator"问题?

java - 将 HashMap 键迭代器转换为 AbstractIterator

arrays - 比较一个对象看它是否是一个集合而不使用 TypeName 并将其作为字符串进行比较?

java - 如何从类中的整数实现 if 语句

java - 在执行器服务中实现线程超时

java - EasyMock 处理 HttpSession