Java Stream takeWhile()方法及示例
takeWhile(java.util.function.Predicate) 方法如果流是有序的,则返回这个流的剩余元素的流,这些元素的最长前缀与给定的谓词相匹配,否则返回这个流中与给定谓词相匹配的元素子集的流。
在有序流的情况下 ,最长前缀是这个流中与作为参数传递给这个方法的谓词相匹配的元素的连续序列。该序列的第一个元素是这个流的第一个元素,紧接着该序列的最后一个元素不匹配给定的谓词。
在无序流的情况下 ,这个流的一些元素匹配给定的谓词,这个操作的行为变得不确定;所以这个方法可以自由地采取任何匹配元素的子集。
当这个流的所有元素都与给定的谓词相匹配时,这个方法将采取所有的元素,其结果与输入流相同,与流的顺序无关;当流中没有元素与给定的谓词相匹配时,则不采取任何元素,其结果为空。
语法
default Stream<T> takeWhile(Predicate<T> predicate)
参数: 该方法接受一个单参数 谓词 ,该谓词是一个无干扰、无状态的谓词,应用于元素以确定元素的最长前缀。
返回值: 该方法返回 新的流
下面的程序说明了takeWhile(java.util.function.Predicate)方法:
程序1 :
// Java program to demonstrate
// Stream.takeWhile method
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GFG {
public static void main(String[] args)
{
// create a stream of numbers from 1 to 10
Stream<Integer> stream
= Stream.of(4, 4, 4, 5, 6, 7, 8, 9, 10);
// apply takeWhile to take all the numbers
// matches passed predicate
List<Integer> list
= stream.takeWhile(number -> (number / 4 == 1))
.collect(Collectors.toList());
// print list
System.out.println(list);
}
}
打印在IDE控制台的输出如下。
输出:
程序2 :
// Java program to demonstrate
// Stream.takeWhile method
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GFG {
public static void main(String[] args)
{
// create a stream of names
Stream<String> stream
= Stream.of("aman", "amar", "suraj",
"suvam", "Zahafuj");
// apply takeWhile to take all the names
// matches passed predicate
List<String> list
= stream.takeWhile(name -> (name.charAt(0) == 'a'))
.collect(Collectors.toList());
// print list
System.out.println(list);
}
}
打印在控制台的输出如下。
输出:
引用: https://docs.oracle.com/javase/10/docs/api/java/util/stream/Stream.html#takeWhile(java.util.function.Predicate)