林克';java中的Single是什么?

林克';java中的Single是什么?,java,linq,lambdaj,Java,Linq,Lambdaj,java中是否有与LINQ等效的语言?老实说,也许在?中,实现自己是一件非常容易的事情: public static <T> T single(Iterable<T> source) { Iterator<T> iterator = source.iterator(); if (!iterator.hasNext()) { throw new IllegalArgumentException("No elements"); } T fi

java中是否有与LINQ等效的语言?老实说,也许在?

中,实现自己是一件非常容易的事情:

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;
}
publicstatict-single(Iterable源代码){
迭代器迭代器=source.Iterator();
如果(!iterator.hasNext()){
抛出新的IllegalArgumentException(“无元素”);
}
T first=iterator.next();
if(iterator.hasNext()){
抛出新的IllegalArgumentException(“多个元素”);
}
先返回;
}

(或者将其放在泛型类中,而不是使方法泛型。您也可以决定使用不同的异常类型。)

老实说,这是一个非常容易自己实现的异常类型:

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;
}
publicstatict-single(Iterable源代码){
迭代器迭代器=source.Iterator();
如果(!iterator.hasNext()){
抛出新的IllegalArgumentException(“无元素”);
}
T first=iterator.next();
if(iterator.hasNext()){
抛出新的IllegalArgumentException(“多个元素”);
}
先返回;
}

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

一个@Jon解决方案的防御性较弱的版本

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

增加口味的检查。

是@Jon解决方案的一个不那么防御性的版本

Collection<T> coll;
T first = col.iterator().next();
coll;
T first=col.iterator().next();
将支票添加到口味中。

使用:

使用:


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

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

我想在番石榴中寻找一个例子,但我的网络连接断了:)我想在番石榴中寻找一个例子,但我的网络连接断了:)这将更接近LINQ的
First
方法。这将更接近LINQ的
First
方法。不过,我更喜欢@Emil的答案,假设番石榴足够轻量级。使用Maven,导入第三方库非常容易,因此“集成新库”的障碍降低了。顺便说一句,过去几天你在哪里???在过去的几天里,我问了大约25个问题,其中一些问题仍然没有答案,我相信你知道其中90%的答案:)几乎所有的问题都比这个问题更重要@开膛手234:哦,番石榴是一个很棒的图书馆,如果你乐意使用额外的图书馆,它绝对值得拥有。看看你问题的前几页,它们是数据库相关的,我不知道:(不过,我更喜欢@eml的答案,假设guava足够轻量级。有了Maven,导入第三方库非常容易,“集成一个新库”障碍降低了。顺便说一句,过去几天你在哪里???我在过去几天问了大约25个问题,其中一些问题仍然没有答案,我相信你知道90%的答案:)几乎所有的问题都比这个问题更重要@开膛手234:哦,番石榴是一个很棒的图书馆,如果你乐意使用额外的图书馆,它绝对值得拥有。看看你问题的前几页,它们是与数据库相关的,我不知道:(检查这一页:github.com/nicholas22/jpropel-light,示例:newstring[]{“james”、“john”、“john”、“eddie”}.where(startsWith(“j”).toList().distinct();jpropel看起来不错,但我在maven repo中找不到它。太糟糕了…检查这个:github.com/nicholas22/jpropel-light,示例:新字符串[]{“james”、“john”、“john”、“eddie”}.where(startsWith(“j”).toList().distinct();jpropel看起来不错,但在maven repo中找不到它。太糟糕了。。。