1

java中是否有与LINQ的Single等价的东西?也许在lambdaj

4

4 回答 4

8

老实说,实现自己非常容易:

public static <T> T single(Iterable<T> source) {
  Iterator<T> iterator = source.iterator();
  if (!iterator.hasNext()) {
    throw new IllegalArgumentException("No elements");
  }
  T first = iterator.next();
  if (iterator.hasNext()) {
    throw new IllegalArgumentException("More than one element");
  }
  return first;
}

(或者把它放在一个泛型类中,而不是让方法泛型。你也可以决定使用不同的异常类型。)

于 2010-11-26T17:18:46.087 回答
3

使用番石榴

Iterables.getOnlyElement(Iterable< T > 可迭代)

于 2010-11-26T17:30:27.907 回答
0

@Jon 解决方案的防御性较低的版本。

Collection<T> coll;
T first = col.iterator().next();

添加检查以品尝。

于 2010-11-26T17:25:47.960 回答
-1

如果您可以使用我的xpresso库,您可以编写:x.list(iterable).toScalar();

于 2015-06-11T01:28:47.640 回答