Java Stream dropWhile()方法及示例
dropWhile( java.util.function.Predicate ) 方法根据流是否有序,返回两种不同类型的流。
如果流是有序的,那么方法会返回一个由这个流的剩余元素组成的流,该流在删除了符合给定谓词的最长前缀的元素之后,否则会返回一个由这个流的剩余元素组成的流,该流在删除了符合给定谓词的元素的子集之后。
在有序流的情况下 ,最长的前缀是这个流中符合作为参数传递给这个方法的谓词的元素的连续序列。该序列的第一个元素是这个流的第一个元素,紧接着该序列的最后一个元素的元素不符合给定的谓词。
在无序流的情况 下,这个流中的一些元素与给定的谓词相匹配,这个操作的行为变得不确定;所以这个方法可以自由地放弃任何匹配元素的子集。
可能有一些情况,当这个流的所有元素与给定的谓词相匹配时,这个方法将放弃所有元素,结果是一个空流,与流的顺序无关;当流中没有元素与给定的谓词相匹配时,没有元素被放弃,结果与输入流相同。
语法
default Stream<T> dropWhile(Predicate<T> predicate)
参数: 该方法接受一个单参数 谓词 ,该谓词是一个无干扰、无状态的谓词,应用于元素以确定元素的最长前缀。
返回值: 该方法返回 新的流
下面的程序说明了dropWhile(java.util.function.Predicate)方法。
程序1 :
// Java program to demonstrate
// Stream.dropWhile 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 dropWhile to drop all the numbers
// matches passed predicate
List<Integer> list
= stream.dropWhile(number -> (number / 4 == 1))
.collect(Collectors.toList());
// print list
System.out.println(list);
}
}
打印在IDE控制台的输出如下。
输出:
程序2 :
// Java program to demonstrate
// Stream.dropWhile 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 dropWhile to drop all the names
// matches passed predicate
List<String> list
= stream.dropWhile(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#dropWhile(java.util.function.Predicate)