在Java 8的Streams中使用LINQs Enumerable.Single()

时间:2015-03-05 16:49:23

标签: java java-8 java-stream

我对C#的LINQ有一些经验,我正在尝试学习Java 8的流API。现在在LINQ中,我经常使用Single() Method,它从序列中选择一个唯一的对象,如果流中没有一个唯一的对象,则抛出异常。

现在:

  • 我认为Java 8的流没有这样的方法吗?
  • 是否有获得此功能的首选替代方案?
  • 自己实施这个是个好主意吗?

1 个答案:

答案 0 :(得分:4)

以下是获得此功能的一种方法:

Stream<String> stream = Stream.of ("first");
String single = stream.reduce((a,b)->{throw new SomeException();})
                      .get();

这个想法是,如果有多个元素,reduce会在lambda表达式中抛出异常。如果没有元素,get()会抛出NoSuchElementException

您还可以通过将代码更改为:

来更改没有元素时抛出的异常
Stream<String> stream = Stream.of ("first");
String single = stream.reduce((a,b)->{throw new SomeException();})
                      .orElseThrow(SomeException::new);