Java 8을 사용 Stream
하여의 요소를 찾으려고합니다 LinkedList
. 그러나 필터 기준과 일치하는 항목이 하나만 있음을 보증하고 싶습니다.
이 코드를 보자 :
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;
}
}
이 코드는 User
ID를 기반으로 찾습니다 . 그러나 User
필터와 일치 하는 수를 보장 할 수는 없습니다 .
필터 라인을 다음으로 변경 :
User match = users.stream().filter((user) -> user.getId() < 0).findAny().get();
던질 것입니다 NoSuchElementException
(좋은!)
그래도 여러 개의 일치 항목이 있으면 오류가 발생하도록하고 싶습니다. 이 방법이 있습니까?
Stream::size
없습니까?
Stream
전보다 훨씬 더 많은 것을 이해하도록 도와주었습니다 .
LinkedHashSet
(삽입 순서를 유지하려는 가정) 또는 HashSet
모든 것을 사용해야한다는 것을 알았을 때 입니다. 컬렉션이 단일 사용자 ID를 찾기 위해서만 사용된다면 왜 다른 모든 항목을 수집합니까? 고유해야 할 사용자 ID를 항상 찾아야 할 가능성이있는 경우 왜 세트가 아닌 목록을 사용합니까? 뒤로 프로그래밍하고 있습니다. 작업에 적합한 모음을 사용하여 자신이 두통 저장
count()
터미널 작업이므로 그렇게 할 수 없습니다. 이후에는 스트림을 사용할 수 없습니다.