在Java中对Arrays.asList进行排序

时间:2018-04-03 16:33:33

标签: java arrays sorting arraylist

import java.util.Arrays;
import java.util.List;

public class CapitalizeAndSort {
    public static void main(String[] args) {

        List<String> topNames2017 = Arrays.asList(
            "Amelia", 
            "Olivia", 
            "emily", 
            "Isla", 
            "Ava", 
            "oliver", 
            "Jack",
            "Charlie", 
            "harry", 
            "Jacob"
        );               

        for(int i = 0; i < topNames2017.size(); i++) {
            topNames2017.set(i, capitalize(topNames2017.get(i))); 
        }   

        List<String> sorted = Arrays.asList(
            topNames2017.stream().sorted(
                (s1, s2) -> s1.compareToIgnoreCase(s2)
                ).toArray(String[]::new)
            );

        sorted.forEach(System.out::println);
    }
    private static String capitalize(final String line) {
        return Character.toUpperCase(line.charAt(0)) + line.substring(1);
    }
}

上面的代码可以按照我想要的方式进行排序。

如何按字母顺序对其进行排序,并确保使用方法引用将首字母大写?

非常感谢帮助!

2 个答案:

答案 0 :(得分:1)

您可以按字母顺序排序,如下所示:

Collections.sort(topNames2017, String.CASE_INSENSITIVE_ORDER);

并使首字母大写如下:

topNames2017 = topNames2017.substring(0, 1).toUpperCase() + topNames2017.substring(1);

答案 1 :(得分:0)

目前还不完全清楚你是否真的想要不区分大小写的顺序,或者是否大写字符串然后对它们进行排序(区分大小写)就足够了,但差异不应该很重要。

你问了

  

如何按字母顺序对其进行排序,并确保使用方法引用将首字母大写?

要使用capitalize方法的引用,您必须使用 YourClassName ::capitalize语法。

示例如下所示:

  • 它会从给定列表中创建Stream个名称
  • 使用对capitalize方法的方法引用
  • 将名称流映射到大写名称
  • 对大写名称流进行排序(不区分大小写 - 如果这无关紧要,您可以省略String.CASE_INSENSITIVE_ORDER
  • 生成的流被收集到新的List<String>

完整代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class CapitalizeAndSort {

    public static void main(String[] args) {

        List<String> topNames2017 = Arrays.asList(
            "Amelia", 
            "Olivia", 
            "emily", 
            "Isla", 
            "Ava", 
            "oliver", 
            "Jack",
            "Charlie", 
            "harry", 
            "Jacob"
        );               

        List<String> sorted = topNames2017.stream()
            .map(CapitalizeAndSort::capitalize)
            .sorted(String.CASE_INSENSITIVE_ORDER)
            .collect(Collectors.toList());

        sorted.forEach(System.out::println);
    }

    private static String capitalize(final String line) {
        return Character.toUpperCase(line.charAt(0)) + line.substring(1);
    }
}