我试图学习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"]

这是预期的行为。

09-04 04:21