【发布时间】:2020-04-30 11:09:36
【问题描述】:
我现在正在尝试理解流。 我想将流中的最高数字保存为可选,但程序只允许我将其保存为整数。由于流可能是空的,所以没有最高值,我希望能够将其保存为 Optional。
到目前为止我已经尝试过了:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Stream;
public class StreamsTest {
public static void main(String[] args) {
Collection<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Stream<Integer> stream1 = list.stream().filter(x -> x % 2 == 1);
if (stream1.findAny().isPresent() == true)
System.out.println("Hey");
Optional<Integer> opt = stream1.max(Comparator.comparing(Integer::valueOf)).get();
}
}
是因为 .get() 吗?我可以想象,当我使用它时,程序期望得到一个值。如果它没有得到一个值,此时它已经崩溃了,没有必要尝试将它保存到一个变量中。因此它要么获取一个值并将其保存在 Integer 变量中,要么由于 .get() 无法为 Optional 传递输入而崩溃。
【问题讨论】:
-
是的,您的问题是什么?使用 get 并将其存储为 int (可能会崩溃)或不 get 并将其存储为可选项。
-
只是一个注释: if (stream1.findAny().isPresent() == true) 可以重写为: if (stream1.findAny().isPresent() )
标签: java java-stream max optional