Tôi đang tìm một lớp học từ Khung thu thập Java không cho phép các phần tử null.Cách giải quyết hạn chế JDK này?
Bạn có biết không?
Tôi đang tìm một lớp học từ Khung thu thập Java không cho phép các phần tử null.Cách giải quyết hạn chế JDK này?
Bạn có biết không?
Hầu hết Queue
triển khai (với ngoại lệ đáng chú ý là LinkedList
) không chấp nhận null
.
EnumSet
là một mục đích đặc biệt nhằm thực hiện Set
không cho phép các giá trị null
.
'EnumSet' chỉ hoạt động với Enumerations ... –
Hàm băm không cho phép khóa hoặc giá trị rỗng.
lòng tốt của tôi, đó là một vụ nổ từ quá khứ! Nó không phải là ngay cả một 'Bộ sưu tập', không bao giờ nhớ một' Danh sách'. – fommil
Sử dụng Constraints
:
import com.google.common.collect.Constraints;
...
Constraints.constrainedList(new ArrayList(), Constraints.notNull())
từ Guava cho sự linh hoạt tối đa.
CẬP NHẬT: Hạn chế dung nham đã không được chấp nhận trong Release 15 - dường như không thay thế.
CẬP NHẬT 2: Hiện tại (Guava 19.0-rc2) Constrains vẫn còn ở đó và không còn được dùng nữa. Tuy nhiên, nó bị thiếu trong số Javadoc.
Tôi sợ rằng Javadoc là đúng như MapConstraint
đã bị phản đối Release 19, quá
+1 cho câu trả lời của bạn nhưng tôi muốn gắn bó với Java Framework;) – Stephan
OK, sau đó tôi có thể cung cấp cho bạn, ví dụ: 'java.util.concurrent.ConcurrentSkipListSet' từ JDK. Hoặc 'Collections.newSetFromMap (ConcurrentHashMap mới
Thật không may 'Constraints' bị phản đối và lên kế hoạch để loại bỏ trong ổi 16,0 :-( –
Bắt đầu here, the Collections API Page. Xem phần "Xem thêm". Theo các liên kết. Quyết định cho phép hoặc không cho phép null được thực hiện bởi lớp triển khai; chỉ cần làm theo các liên kết trong các phần "Xem thêm" khác nhau để đến các lớp triển khai (ví dụ, HashMap) rồi xem xét các phương thức chèn (thường là biến thể khi thêm, đẩy hoặc đặt) để xem triển khai đó có cho phép không.
Apache Commons Framework - CollectionUtils.addIgnoreNull
Thêm vào myList nếu myObj không rỗng.
org.apache.commons.collections.CollectionUtils.addIgnoreNull(myList, myObj)
Sử dụng Google Ổi vị từ (câu trả lời từ @Joachim Sauer bị phản đối)
//list is the variable where we want to remove null elements
List nullRemovedList=Lists.newArrayList(Iterables.filter(list, Predicates.notNull()));
//Or convert to Immutable list
List nullRemovedList2=ImmutableList.copyOf(Iterables.filter(list, Predicates.notNull()));
gì nên xảy ra? Nếu bạn chỉ muốn bỏ qua list.add (null), tôi sẽ làm cho một lớp con thực hiện yêu thích của bạn, ghi đè lên add() và kiểm tra giá trị null – leifg
Có lẽ cách tốt hơn để làm điều đó là không bao giờ chèn null vào vị trí đầu tiên? Dung sai (và do đó bảo vệ chống lại) nulls thường là một thực tế kém. –
@leifg Đừng chỉ ghi đè thêm mà còn addAll! Nếu không, bạn có thể đang ở trong một bất ngờ thú vị. – Voo