Aja*_*mar 6 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);
Run Code Online (Sandbox Code Playgroud)
实际输出:
abhi
alex
anna
amanda
Run Code Online (Sandbox Code Playgroud)
预期输出:
abhi
alex
amanda
anna
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
dre*_*ash 16
您首先进行排序,然后才对toLowerCase元素应用 ,因为Anna资本A会在amanda.
请改为执行以下操作:
Stream.of(names)
.map(String::toLowerCase)
.filter(x -> x.startsWith("a"))
.sorted()
.forEachOrdered(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出:
abhi
alex
amanda
anna
Run Code Online (Sandbox Code Playgroud)
您错过了.sorted()之前的调用forEachOrdered,否则应用后流的内容将不会被排序.toLowerCase()。
什么forEachOrdered是按照它们在流中的顺序在流中的每个项目上运行一个函数;它不会对值本身进行排序。