Java 如何根据姓名对arraylist进行排序,并且arraylist包含姓名的首字母为person?
例如:Java 如何根据姓名对arraylist进行排序,并且arraylist包含姓名的首字母为person?,java,sorting,arraylist,collections,comparable,Java,Sorting,Arraylist,Collections,Comparable,例如: 我在数组列表中添加了[A约翰,B亚当,K亨利] 我希望输出为[B亚当,K亨利,A约翰] 基于名称排序,但排序时不应考虑人的初始值。br>我如何才能做到这一点?您可以使用compareTo()方法。。首先使用空格拆分(“”)拆分名称,然后将所有名称保存在字符串数组中。对上一个单词和当前单词使用compareTo()。您可以使用compareTo()方法。。首先使用空格拆分(“”)拆分名称,然后将所有名称保存在字符串数组中。对上一个单词和当前单词使用compareTo()。使用仅比较名称的选
我在
数组列表中添加了[A约翰,B亚当,K亨利]
我希望输出为[B亚当,K亨利,A约翰]
基于名称排序,但排序时不应考虑人的初始值。br>我如何才能做到这一点?
您可以使用compareTo()方法。。首先使用空格拆分(“”)拆分名称,然后将所有名称保存在字符串数组中。对上一个单词和当前单词使用compareTo()。您可以使用compareTo()方法。。首先使用空格拆分(“”)拆分名称,然后将所有名称保存在字符串数组中。对上一个单词和当前单词使用compareTo()。使用仅比较名称的选项:
List<String> list = Arrays.asList("A John", "B Adam", "K Henry");
list.sort(Comparator.comparing(s -> s.split(" ")[1]));
List List=Arrays.asList(“A John”、“B Adam”、“K Henry”);
list.sort(Comparator.comparing(s->s.split(“”[1]));
使用仅比较名称的:
List<String> list = Arrays.asList("A John", "B Adam", "K Henry");
list.sort(Comparator.comparing(s -> s.split(" ")[1]));
List List=Arrays.asList(“A John”、“B Adam”、“K Henry”);
list.sort(Comparator.comparing(s->s.split(“”[1]));
为您的人员创建一个类Person
,并使用比较器对列表进行排序
个人类:
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));
}
排序:
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));
}
@测试
public void testSortPersons(){
List people=Arrays.asList(新人(“John”,“A”),
新人(“亚当”、“B”),
新人(“亨利”、“K”);
排序(Comparator.comparing(Person::getForename));
}
通常,一个包含人员数据的类比使用字符串为您的人员创建一个类人员,并使用比较器对列表进行排序更可靠
个人类:
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));
}
排序:
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));
}
@测试
public void testSortPersons(){
List people=Arrays.asList(新人(“John”,“A”),
新人(“亚当”、“B”),
新人(“亨利”、“K”);
排序(Comparator.comparing(Person::getForename));
}
一般来说,使用一个包含人员数据的类而不是使用字符串将是一种更稳健的方法。我强烈建议在列表中使用比字符串更好的对象。
在这种情况下,您可以使用比较器对列表进行排序,或者使对象具有可比性
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);
}
}
import java.util.ArrayList;
导入java.util.Collections;
公共类比较示例{
静态类人员实现可比较{
私有字符串首字母;
私家姓;
公众人物(最后一个字符串首字母,最后一个字符串姓氏){
this.initial=initial;
this.姓氏=姓氏;
}
公共字符串getInitial(){
返回首字母;
}
public void setInitial(最终字符串首字母){
this.initial=initial;
}
公共字符串getNames(){
返回姓氏;
}
public void setSurName(最后一个字符串姓氏){
this.姓氏=姓氏;
}
@凌驾
公共内部比较(最终人员o){
返回姓氏。比较(o.姓氏);
}
@凌驾
公共字符串toString(){
返回首字母+“”+姓氏;
}
}
公共静态void main(字符串[]args){
人员a=新人(“a”、“约翰”);
人员b=新人员(“b”、“亚当”);
人员c=新人(“K”、“亨利”);
ArrayList=新建ArrayList();
列表.添加(a);
列表.添加(b);
增加(c)项;
系统输出打印项次(列表);
集合。排序(列表);
系统输出打印项次(列表);
}
}
我强烈建议在列表中使用比字符串更好的对象。
在这种情况下,您可以使用比较器对列表进行排序,或者使对象具有可比性
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);
}
}
import java.util.ArrayList;
导入java.util.Collections;
公共类比较示例{
静态类人员实现可比较{
私有字符串首字母;
私家姓;
公众人物(最后一个字符串首字母,最后一个字符串姓氏){
this.initial=initial;
this.姓氏=姓氏;
}
公共字符串getInitial(){
返回首字母;
}
public void setInitial(最终字符串首字母){
this.initial=initial;
}
公共字符串getNames(){
返回姓氏;
}
public void setSurName(最后一个字符串姓氏){
this.姓氏=姓氏;
}
@凌驾
公共内部比较(最终人员o){
返回姓氏。比较(o.姓氏);
}
@凌驾
公共字符串toString(){
返回首字母+“”+姓氏;
}
}
公共静态void main(字符串[]args){
人员a=新人(“a”、“约翰”);
人员b=新人员(“b”、“亚当”);
人员c=新人(“K”、“亨利”);
ArrayList=新建ArrayList();
列表.添加(a);
列表.添加(b);
增加(c)项;
系统输出打印项次(列表);
集合。排序(列表);
系统输出打印项次(列表);
}
}
尝试编写一个比较器。使用诸如:姓氏和forename@uoyilmaz我们不能用Compariable来实现这一点吗?@Syed,我们可以,但是Compariable只有一种方法可以将自己与其他人进行比较。使用comparable没有任何意义,除非有一种特定的方法来比较在问题领域最有意义的实体。对于像“人”这样的实体,有多种比较方式,所以比较器更合适。试着写一个比较器。使用诸如:姓氏和forename@uoyilmaz我们不能用comparable实现这一点吗?@Sy