java - Stream sorted() 导致意外结果

标签 java sorting java-8 java-stream

我有一个数组和一个流,如下所示。

String[] names = {"Alex", "Anna", "Abhi", "Some", "Broad", "Dustin", 
                  "amanda", "Hanna", "Steve", "Sydney"};
        
Stream.of(names)
        .sorted()
        .map(String::toLowerCase)
        .filter(x -> x.startsWith("a"))
        .forEachOrdered(System.out::println);
        //I have also tried - .forEach(System.out::println);
实际输出:
abhi
alex
anna
amanda
预期输出:
abhi
alex
amanda
anna
我在这里缺少什么?

最佳答案

您首先进行排序,然后才应用 toLowerCase在元素上,以及自 Anna有资本A之前会来amanda .
请改为执行以下操作:

Stream.of(names)
        .map(String::toLowerCase)
        .filter(x -> x.startsWith("a"))
        .sorted()
        .forEachOrdered(System.out::println);
输出:
abhi
alex
amanda
anna

关于java - Stream sorted() 导致意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65797813/

相关文章:

java - 双冒号运算符 (::) 和(有效)最终

java - 流 : Calculate the difference of totals in one go

java - Pattern.asPredicate 中的错误?

java - 可选的 monad 和 Java 中的 Demeter 法则

java - Spring MVC JSON序列化@JsonSerialize被忽略

c++ - 根据另一个对象的值对类中的二维对象进行排序并赋值 C++

java - 选择排序比较和交换已经排序的列表

java - 最有前途的新 JSR?

java - 快速乘法和减法取模素数

mysql - 按 "rep"订购帖子,但仅限 "one"天限制