如何根据名称对arraylist进行排序,Arraylist包含姓名与姓名的首字母?

时间:2017-06-19 09:04:05

标签: java sorting arraylist collections comparable

例如:
我在[A John, B Adam, K Henry]中添加了ArrayList

我希望输出为[B Adam, K Henry, A John]

根据名称进行排序,但在排序时不应考虑一个人的首字母。
我该怎么做?

4 个答案:

答案 0 :(得分:2)

你可以使用compareTo()方法..首先使用空格分割(“”)拆分名称,然后将所有名称保存在字符串数组中,使用compareTo()作为prev word和curr word ..

答案 1 :(得分:2)

使用仅比较名称的comparator

    List<String> list = Arrays.asList("A John", "B Adam", "K Henry");
    list.sort(Comparator.comparing(s -> s.split(" ")[1]));

答案 2 :(得分:1)

为您的人创建一个班级Person,并使用Comparator对列表进行排序。

人类:

public class Person {

    private String surname;
    private String forename;

    public Person(String forename, String surname) {
      this.surname = surname;
      this.forename = forename;
    }

    public String getSurname() {
      return surname;
    }

    public void setSurname(String surname) {
      this.surname = surname;
    }

    public String getForename() {
      return forename;
    }

    public void setForename(String forename) {
      this.forename = forename;
    }
  }

<强>分拣:

  @Test
  public void testSortPersons() {
    List<Person> people = Arrays.asList(new Person("John", "A"),
                                        new Person("Adam", "B"),
                                        new Person("Henry", "K"));
    people.sort(Comparator.comparing(Person::getForename));
  }

通常一种更健壮的方法是让一个类包含您的人的数据,而不是使用Strings

答案 3 :(得分:0)

我强烈建议在列表中使用更好的对象然后使用String。 在这种情况下,您可以使用比较器来整理列表,或使对象具有可比性。

$itemDB->set('isAvailable', (int) $options['isAvailable']);
$itemDB->where('id', $options['id']);
$itemDB->update('Item');