Streamsorted()导致意外结果

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

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
abhi
alex
amanda
anna

我在这里缺少什么?

回答

您首先进行排序,然后才对toLowerCase元素应用 ,因为Anna资本A会在amanda.

请改为执行以下操作:

Stream.of(names)
        .map(String::toLowerCase)
        .filter(x -> x.startsWith("a"))
        .sorted()
        .forEachOrdered(System.out::println);

输出:


回答

您错过了.sorted()之前的调用forEachOrdered,否则应用后流的内容将不会被排序.toLowerCase()

什么forEachOrdered按照它们在流中的顺序在流中的每个项目上运行一个函数;它不会对值本身进行排序。

  • @RobertHarvey It has an effect, but not the desired one, since it sorts uppercase letters before lowercase letters.
  • @AjayKumar Go for dreamcash's answer: theirs explains why `.sorted()` doesn't work as expected.

以上是Streamsorted()导致意外结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>