Фильтровать поток Java до 1 и только 1 элемента ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Фильтровать поток Java до 1 и только 1 элемента

Сообщение Anonymous »

Я пытаюсь использовать потоки Java 8 для поиска элементов в LinkedList. Однако я хочу гарантировать, что существует одно и только одно совпадение с критериями фильтра.

Возьмите этот код:

Код: Выделить всё

public static void main(String[] args) {

LinkedList users = new LinkedList();
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));

User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
System.out.println(match.toString());
}

Код: Выделить всё

static class User {

@Override
public String toString() {
return id + " - " + username;
}

int id;
String username;

public User() {
}

public User(int id, String username) {
this.id = id;
this.username = username;
}

public void setUsername(String username) {
this.username = username;
}

public void setId(int id) {
this.id = id;
}

public String getUsername() {
return username;
}

public int getId() {
return id;
}
}
Этот код находит пользователя по его идентификатору. Но нет никаких гарантий, сколько пользователей соответствовало фильтру.

Изменение строки фильтра на:

Код: Выделить всё

User match = users.stream().filter((user) -> user.getId() < 0).findAny().get();
Выдаст исключение NoSuchElementException (хорошо!)

Я бы хотел, чтобы оно выдавало ошибку если есть несколько совпадений. Есть ли способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/226 ... -1-element

Вернуться в «JAVA»