Java 按第二个字对字符串数组排序

Java 按第二个字对字符串数组排序,java,arrays,sorting,Java,Arrays,Sorting,我有以下数据 1. John Smith 2. Tom Cruise 3. Chuck Norris 4. Bill Gates 5. Steve Jobs 如您所见,数据采用特定格式,[ID]。[Firstname][Lastname]。是否有一种方法可以按Firstname对该数组进行排序 输出应如下所示: 4. Bill Gates 3. Chuck Norris 1. John Smith 5. Steve Jobs 2. Tom Cruise 您可以提供自定义比较器,以便按名字进行

我有以下数据

1. John Smith
2. Tom Cruise
3. Chuck Norris
4. Bill Gates
5. Steve Jobs
如您所见,数据采用特定格式,
[ID]。[Firstname][Lastname]
。是否有一种方法可以按
Firstname
对该数组进行排序

输出应如下所示:

4. Bill Gates
3. Chuck Norris
1. John Smith
5. Steve Jobs
2. Tom Cruise

您可以提供自定义比较器,以便按名字进行排序

    List<String> data = Arrays.asList("1. John Smith", "2. Tom Cruise", "3. Chuck Norris", "4. Bill Gates", "5. Steve Jobs");
    Comparator<String> c = (s1, s2) -> s1.split("\\s+")[1].compareTo(s2.split("\\s+")[1]);
    List<String> sorted = data.stream().sorted(c).collect(Collectors.toList());
    System.out.println(sorted);
或者干脆

    Comparator<String> com = Comparator.comparing(s -> s.split("\\s+")[1]);

    Comparator<String> old = new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.split("\\s+")[1].compareTo(s2.split("\\s+")[1]);
        }
    };

您将需要一个自定义比较器

String[] names = new String[]{"1. John Smith","2. Tom Cruise","3. Chuck Norris","4. Bill Gates","5. Steve Jobs"};
List<String> nameList = Arrays.asList(names);
Collections.sort(nameList, new Comparator<String>() {

    @Override
    public int compare(String arg0, String arg1) {
        String firstName0 = arg0.split(". ")[1].split(" ")[0];
        String firstName1 = arg1.split(". ")[1].split(" ")[0];
        return firstName0.compareTo(firstName1);
    }
});

您可以使用lambda通过自己的比较标准

String[] names = {"1. John Smith", "2. Tom Cruise", "3. Chuck Norris", "4. Bill Gates", "5. Steve Jobs"};

ArrayList<String> namesList = new ArrayList<>();
for(int i=0; i<names.length; i++) {
    namesList.add(names[i]);
}

Collections.sort(namesList, (name1, name2) -> name1.split(" ")[1].compareTo(name2.split(" ")[1]));

for(String name : namesList) {
    System.out.println(name);
}

“有没有办法按名字对数组排序?”-是的,您可以使用自定义的
比较器
类。到目前为止你都做了些什么?没有什么,因为我不是一个专业人士,即使我的问题结构良好,而且问题本身非常简单,但留下不赞成票也不是很好。如果你访问并阅读,你将了解这里评估问题的规则。希望它以不同的方式工作并不能使它成为现实。@JimGarrison我在发布这篇文章之前已经访问过该页面,所有内容都是按照规则发布的,并且结构、格式、简单、输入和输出都很整洁。停止对社区的辱骂和对快乐的贬低——你没有表现出任何努力。你的问题是“有个问题,给我写代码”。那是离题的。
String[] names = new String[]{"1. John Smith","2. Tom Cruise","3. Chuck Norris","4. Bill Gates","5. Steve Jobs"};
List<String> nameList = Arrays.asList(names);
Collections.sort(nameList, new Comparator<String>() {

    @Override
    public int compare(String arg0, String arg1) {
        String firstName0 = arg0.split(". ")[1].split(" ")[0];
        String firstName1 = arg1.split(". ")[1].split(" ")[0];
        return firstName0.compareTo(firstName1);
    }
});
[4. Bill Gates, 3. Chuck Norris, 1. John Smith, 5. Steve Jobs, 2. Tom Cruise]
String[] names = {"1. John Smith", "2. Tom Cruise", "3. Chuck Norris", "4. Bill Gates", "5. Steve Jobs"};

ArrayList<String> namesList = new ArrayList<>();
for(int i=0; i<names.length; i++) {
    namesList.add(names[i]);
}

Collections.sort(namesList, (name1, name2) -> name1.split(" ")[1].compareTo(name2.split(" ")[1]));

for(String name : namesList) {
    System.out.println(name);
}
4. Bill Gates
3. Chuck Norris
1. John Smith
5. Steve Jobs
2. Tom Cruise