Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据姓名对arraylist进行排序,并且arraylist包含姓名的首字母为person?_Java_Sorting_Arraylist_Collections_Comparable - Fatal编程技术网

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