【问题标题】:Sorting Arrays.asList In Java在 Java 中对 Arrays.asList 进行排序
【发布时间】:2018-04-03 16:33:32
【问题描述】:
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);
    }
}

上面的代码可以按我想要的方式工作和排序。

如何按字母顺序排序并确保使用方法引用将第一个字母大写?

非常感谢您的帮助!

【问题讨论】:

  • 您确定此代码有效吗?格式化后出现一些语法问题
  • 为什么不直接使用topNames2017.sort()
  • 如果您需要首字母大写并排序,您可以这样做:topNames2017.stream().map(YourClassName::capitalize).sorted().collect(Collectors.toList());

标签: java arrays sorting arraylist


【解决方案1】:

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

Collections.sort(topNames2017, String.CASE_INSENSITIVE_ORDER);

并将首字母大写如下:

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

【讨论】:

    【解决方案2】:

    不完全清楚您是否真的想要不区分大小写的顺序,或者是否将字符串大写然后对它们进行排序(区分大小写)是否就足够了,但区别并不重要。

    你问了

    如何按字母顺序排序并确保使用方法引用将第一个字母大写?

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

    一个例子如下所示:

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

    完整代码:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2012-02-14
      • 2019-04-24
      • 1970-01-01
      相关资源
      最近更新 更多