假设在流操作中有一个异常(选中/取消选中),并且希望从现在开始忽略此元素。流不能被中止,只能忽略抛出异常的元素。我明确避免说skip,因为它是一个流操作。
所以这个例子是使用 map()
操作演示。这里我有一个除法0(例如),所以“map”应该跳过这个元素。
例如:
@Test
public void ignoreException() {
assertThat(Stream.of(1,2,1,3).map(i -> 10 / i).reduce(0, Integer::sum), is(28));
// the zero will break the next stream
assertThat(Stream.of(1,2,0,3).map(i -> 10 / i).reduce(0, Integer::sum), is(18));
}
所以被零除可以打断整个流。
我发现很多文章将运行时异常 Package 在选中的异常中( throw new RuntimeException(ex)
). 或部分或全部功能。
或者我制作了一个返回java.util.function.function的 Package 器(例如: ....map(wrapper(i -> 10/i))...
),在异常情况下返回“null”。但右手操作现在可能会失败,如我的示例(reduce)。
唯一有用的方法是一个“非此即彼”的概念(非此即彼的一个流),因此在我的示例中被零除将变成一个“左”,并且可以用不同的方式处理。
2条答案
按热度按时间wvmv3b1j1#
试试这个:
35g0bw712#
在流上可以实现元素转换并导致元素被丢弃的操作相对较少——事实上,只有一种,
flatMap
.所以你的 Package 纸或多或少看起来像