如何根据名称对数组列表进行排序,并且数组列表包含带有人名首字母的名称?
How can I sort an arraylist based on the name and the Arraylist contains name with Initial of a person?
例如:
我在 ArrayList
.
中添加了 [A John, B Adam, K Henry]
我希望输出为 [B Adam, K Henry, A John]
按姓名排序,但排序时不考虑人名首字母。
我该怎么做?
您可以使用 compareTo() 方法。首先使用 space split(" ") 拆分名称,然后将所有名称保存在字符串数组中,对上一个词和当前词使用 compareTo() ..
使用仅比较名称的 comparator:
List<String> list = Arrays.asList("A John", "B Adam", "K Henry");
list.sort(Comparator.comparing(s -> s.split(" ")[1]));
为您的人员创建一个 class Person
并使用 Comparator
对列表进行排序。
Class 人:
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));
}
通常更可靠的方法是让 class 包含您个人的数据而不是使用 Strings
。
我强烈建议在列表中使用比 String 更好的对象。
在这种情况下,您可以使用 Comparator 来整理您的列表,或使您的对象具有可比性。
import java.util.ArrayList;
import java.util.Collections;
public class ComparatorExample {
static class Person implements Comparable<Person> {
private String initial;
private String surName;
public Person(final String initial, final String surName) {
this.initial = initial;
this.surName = surName;
}
public String getInitial() {
return initial;
}
public void setInitial(final String initial) {
this.initial = initial;
}
public String getSurName() {
return surName;
}
public void setSurName(final String surName) {
this.surName = surName;
}
@Override
public int compareTo(final Person o) {
return surName.compareTo(o.surName);
}
@Override
public String toString() {
return initial + ' ' + surName;
}
}
public static void main(String[] args) {
Person a = new Person("A", "John");
Person b = new Person("B", "Adam");
Person c = new Person("K", "Henry");
ArrayList<Person> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
例如:
我在 ArrayList
.
[A John, B Adam, K Henry]
我希望输出为 [B Adam, K Henry, A John]
按姓名排序,但排序时不考虑人名首字母。
我该怎么做?
您可以使用 compareTo() 方法。首先使用 space split(" ") 拆分名称,然后将所有名称保存在字符串数组中,对上一个词和当前词使用 compareTo() ..
使用仅比较名称的 comparator:
List<String> list = Arrays.asList("A John", "B Adam", "K Henry");
list.sort(Comparator.comparing(s -> s.split(" ")[1]));
为您的人员创建一个 class Person
并使用 Comparator
对列表进行排序。
Class 人:
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));
}
通常更可靠的方法是让 class 包含您个人的数据而不是使用 Strings
。
我强烈建议在列表中使用比 String 更好的对象。 在这种情况下,您可以使用 Comparator 来整理您的列表,或使您的对象具有可比性。
import java.util.ArrayList;
import java.util.Collections;
public class ComparatorExample {
static class Person implements Comparable<Person> {
private String initial;
private String surName;
public Person(final String initial, final String surName) {
this.initial = initial;
this.surName = surName;
}
public String getInitial() {
return initial;
}
public void setInitial(final String initial) {
this.initial = initial;
}
public String getSurName() {
return surName;
}
public void setSurName(final String surName) {
this.surName = surName;
}
@Override
public int compareTo(final Person o) {
return surName.compareTo(o.surName);
}
@Override
public String toString() {
return initial + ' ' + surName;
}
}
public static void main(String[] args) {
Person a = new Person("A", "John");
Person b = new Person("B", "Adam");
Person c = new Person("K", "Henry");
ArrayList<Person> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}