Bir Stream
öğeleri bulmak için Java 8 s kullanmaya çalışıyorum LinkedList
. Bununla birlikte, filtre kriterlerine bir ve tek bir eşleşme olduğunu garanti etmek istiyorum.
Bu kodu al:
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;
}
}
Bu kod User
, kimlikleri temel alınarak bulunur. Ancak User
filtrenin kaç tane ile eşleştiğinin garantisi yoktur .
Filtre hattını şu şekilde değiştirme:
User match = users.stream().filter((user) -> user.getId() < 0).findAny().get();
Bir firlatirmisiniz NoSuchElementException
(iyi!)
Yine de birden fazla eşleşme varsa bir hata atmasını istiyorum. Bunu yapmanın bir yolu var mı?
Stream::size
?
Stream
daha önce yaptığımdan çok daha fazlasını anlamama yardımcı oldu ...
LinkedHashSet
(ekleme siparişinin korunmasını istediğinizi varsayarak) veya bir süre HashSet
boyunca kullanmanız gerektiğini fark ettiğiniz zamandır . Koleksiyonunuz yalnızca tek bir kullanıcı kimliği bulmak için kullanılıyorsa, neden diğer tüm öğeleri topluyorsunuz? Her zaman benzersiz olması gereken bir kullanıcı kimliği bulmanız gerekecek bir potansiyel varsa, neden bir set değil bir liste kullanmalısınız? Geriye doğru programlıyorsunuz. İş için doğru koleksiyonu kullanın ve kendinizi bu baş ağrısından
count()
bir terminal işlemidir, bu yüzden bunu yapamazsınız. Akış daha sonra kullanılamaz.