I am trying to use Java 8 Stream
s to find elements in a LinkedList
. I want to guarantee, however, that there is 1 and only 1 match to the filter criteria.java
Take this code:web
public static void main(String[] args) { LinkedList<User> 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; } }
This code finds a User
based on their ID. But there are no guarantees how many User
s matched the filter.app
Changing the filter line to:less
User match = users.stream().filter((user) -> user.getId() < 0).findAny().get();
Will throw a NoSuchElementException
(good!)ide
I would like it to throw an error if there are multiple matches, though. Is there a way to do this?post
count()
is a terminal operation so you can't do that. The stream can't be used after. – ZouZou Mar 27 at 17:42Stream::size
? – ryvantage Mar 27 at 17:44Stream
s so much more than I did before... – ryvantage Mar 27 at 17:50