Java List应始终具有特定值作为第一项

时间:2018-02-02 13:54:14

标签: java collections

我有一个像下面的pojo,

class Employee 
{
    private String employeeName;
    private String age;
    //getter();setter();
    ....
}

我的employeeList价值低于

List<Employee> employeeList = new ArrayList<Employee>();

值:[{"ccc", 20}, {"bbb", 30}, {"aaa", 40}]

我希望employeeList具有上述值,但该列表应首先具有“bbb”obj。如何实现这一点。我们不能简单地对员工姓名使用排序。

2 个答案:

答案 0 :(得分:2)

您可以使用Collections.sort执行此操作并提供Comparator例如

public void sortList(String byString){
  Collections.sort(employeeList, new Comparator<Employee>() {
          @Override
          public int compare(Employee lhs, Employee rhs) {
              if (lhs.getEmployeeName().equals(byString)) return -1;
              if (rhs.getEmployeeName().equals(byString)) return 0;
              return 1;
           }
   });
 }

Ideone:https://ideone.com/FCRxwp

答案 1 :(得分:0)

如果你想让它变量并且能够传递应该在开头排序的内容,你可以创建一个简单的方法:

public static void sort(List<Employee> list, String nameToSortAtBeginning) {
    Collections.sort(list, new Comparator<Employee>() {

        @Override
        public int compare(Employee o1, Employee o2) {
            if(nameToSortAtBeginning.equals(o1.getEmployeeName()) && !nameToSortAtBeginning.equals(o2.getEmployeeName())) {
                return -1;
            } else {
                return o1.getEmployeeName().compareTo(o2.getEmployeeName());
            }
        }
    });
}

然后调用该方法:

sort(employeeList, "bbb");

注意:如果您将 null 作为某些员工姓名的可能值,则上述代码将无效。如果将null作为值,则有可能必须在比较器中添加空值处理。