Java 8+流中是否有等同功能?

Tri*_*ian 1 java lambda break java-8 java-stream

我正在尝试根据条件过滤列表。是否有其他替代方法可以中断Java 8流以停止过滤?

举个例子:假设我有以下列表。

List<String> list = Arrays.asList("Foo","Food" ,"Fine","Far","Bar","Ford","Flower","Fire");

list.stream()
        .filter(str -> str.startsWith("F")) //break when str doesn't start with F
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我希望从头开始以“ F”开头的所有字符串,一旦找到不以“ F”开头的字符串,我想停止过滤。没有流,我将执行以下操作:

List<String> result = new ArrayList<>();
for(String s : list){
    if(s.startsWith("F")){
        result.add(s);
    }
    else{
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在信息流中使用“中断”?

Rav*_*ala 9

您可以takeWhile在Java9中使用运算符,它完全可以满足您的需求。这是它的外观。

List<String> res = list.stream()
    .takeWhile(s -> s.startsWith("F"))
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)