我试图学习Java-9的新功能,我了解了Stream的dropWhile方法,但是它在两种不同的情况下返回了不同的值。
这是我的代码
package src.module;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.List;
public class Test {
public static void main(String[] args) {
String s[] = new String[3];
s[0] = "Hello";
s[1] = "";
s[2] = "World";
List<String> value = Stream.of(s).dropWhile(a -> a.isEmpty()).collect(Collectors.toList());
System.out.println(value);
List<String> values = Stream.of("a", "b", "c", "", "e", "f").dropWhile(d -> !d.isEmpty())
.collect(Collectors.toList());
System.out.println(values);
}
}
这是我得到的答案
[Hello, , World]
[, e, f]
我认为应该在第一个条件下打印[,World]。
提前致谢。
最佳答案
Java 9中引入的 dropWhile
method将删除与谓词匹配的最长的起始元素集。
如果删除了与给定谓词匹配的元素的最长前缀,则返回由该流的其余元素组成的流(如果已排序)。
因为您的条件是该项目为空,而第一个项目不为空,所以不会删除任何内容,保留["Hello", "", "World"]
不变。
最后,当您以相反的条件调用dropWhile
时,如果不为空,则前三个项目匹配并被删除,剩下的剩余项目["", "e", "f"]
。
这是预期的行为。