2010-11-26 2 views
1

Есть ли эквивалент LINQ's Single в java? Возможно, в lambdaj?LINQ Single в java?

+1

Проверить этот один: github.com/nicholas22/jpropel-light, пример: новый String [] {"james", "john", "john", "eddie"} .where (startsWith ("j")). ToList(). Distinct(); – 2011-10-08 10:27:56

+0

jpropel кажется приятным, но я не могу найти его в maven repo. слишком плохо ... – 2012-10-28 12:58:04

ответ

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; 
} 

(Или поставить его в общем классе вместо того, чтобы метод родовыми Вы можете решить использовать другой тип исключения, тоже. .)

+0

Тем не менее, я предпочитаю ответ @ Эмиля, предполагая, что гуава достаточно легка. С Maven импортирование сторонних библиотек настолько просто, что барьер «интегрировать новую библиотеку» снижен. См. Также http://stackoverflow.com/questions/4263607/what-is-the-de-facto-standard-for-action-func-classes – ripper234 2010-11-26 18:07:20

+0

Кстати, где вы были за последние несколько дней ??? Я задал около 25 вопросов за последние несколько дней, некоторые из них до сих пор остаются без ответа, и я уверен, что вы знаете ответы на 90% из них :) Почти все они более важны, чем этот вопрос ... http: // stackoverflow.com/users/11236/ripper234 – ripper234 2010-11-26 18:12:05

0

Менее защитная версия решения @ Jon.

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

Добавить проверки по вкусу.

-1

Если вы можете использовать мою xpresso библиотеку вы можете написать: x.list(iterable).toScalar();

Смежные вопросы