JAVA07_Stream流中FindFirst方法查找元素第一个
Posted 所得皆惊喜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA07_Stream流中FindFirst方法查找元素第一个相关的知识,希望对你有一定的参考价值。
-
①. Stream的findFirst方法在此流中查找第一个元素作为Optional,如果流中没有元素,findFirst返回空的Optional,如果findFirst选择的元素为null,它将抛出NullPointerException
Optional findFirst() -
②. findAny():返回流中的任意一个元素;如果流是空的,则返回空
- 对于串行流,输出的都是查找第一个元素
- 对于并行流,随机获取
/**
* Returns an @link Optional describing the first element of this stream,
* or an empty @code Optional if the stream is empty. If the stream has
* no encounter order, then any element may be returned.
*
* <p>This is a <a href="package-summary.html#StreamOps">short-circuiting
* terminal operation</a>.
*
* @return an @code Optional describing the first element of this stream,
* or an empty @code Optional if the stream is empty
* @throws NullPointerException if the element selected is null
* 返回一个描述次流的第一个元素的Optional,如果流为空,则返回一个空的Optional,如果没有遇到顺序,则可以返回任何元素
* 这是一个短路终端操作
* 抛出: NullPointException - 如果选择的元素为null
*/
Optional<T> findFirst();
/**
* Returns an @link Optional describing some element of the stream, or an
* empty @code Optional if the stream is empty.
*
* <p>This is a <a href="package-summary.html#StreamOps">short-circuiting
* terminal operation</a>.
*
* <p>The behavior of this operation is explicitly nondeterministic; it is
* free to select any element in the stream. This is to allow for maximal
* performance in parallel operations; the cost is that multiple invocations
* on the same source may not return the same result. (If a stable result
* is desired, use @link #findFirst() instead.)
*
* @return an @code Optional describing some element of this stream, or an
* empty @code Optional if the stream is empty
* @throws NullPointerException if the element selected is null
* @see #findFirst()
* 返回一个描述流的某些元素的Optional,如果流为空,则返回一个空Optional
* 这是一个短路终端操作
* 这个流操作的行为是明确的非确定下的,可以自由选择流中的任何元素。这是为了在并行操作中实现最大的性能。
* 代价是对同一源多次调用可能不会返回相同的结果(如果需要稳定的结果,使用findFirst())
* 抛出: NullPointException - 如果选择的元素为null
*/
Optional<T> findAny();
- ③. 假设我们有一个整数流,并对其调用findFirst方法
public class FindFirstDemo1
public static void main(String[] args)
List<String> list = Arrays.asList("Vijay", "Suresh", "Vinod");
String output = list.stream()
.filter(e -> e.startsWith("V")) // Vijay, Vinod
.findFirst() //Vijay
.orElse("NA");
// Vijay
System.out.println(output);
List<Integer> numList = Arrays.asList(31, 32, 33, 34);
numList.stream()
.filter(n -> n % 2 == 0) // 32, 34
.findFirst() //32
.ifPresent(e -> System.out.println(e));//32
//0.准备一个数组
String[] strs = "aaa","bbb","ccc","ddddd","abcdefg";
// 1.查找第一个元素
Optional<String> first = Stream.of(strs).findFirst();
System.out.println("获取第一个元素 : "+first.get()); // 通过Optional的get()方法取值
//2.查找任意一个元素 - > 对于串行流,输出的都是查找第一个元素
Optional<String> any = Stream.of(strs).findAny();
System.out.println("获取任意一个元素 :"+any.get()); // 通过Optional的get()方法取值
//2.查找任意一个元素 - > 对于并行流,随机获取
Optional<String> parallelFindAny = Arrays.asList(strs).parallelStream().findAny();
System.out.println("获取任意一个元素 :"+parallelFindAny.get()); // 通过Optional的get()方法取值
以上是关于JAVA07_Stream流中FindFirst方法查找元素第一个的主要内容,如果未能解决你的问题,请参考以下文章
JAVA07_Stream流中FindFirst方法查找元素第一个
java8 stream接口 终端操作 min,max,findFirst,findAny
关于java stream流中的peek方法和foreach的自我理解: