2012-10-04 32 views
101

Tôi muốn xác minh xem bộ sưu tập có trống không và null. Bất cứ ai có thể xin vui lòng cho tôi biết thực hành tốt nhất.Thực tiễn tốt nhất để xác thực bộ sưu tập rỗng và trống trong Java

Hiện nay, tôi đang kiểm tra như sau:

if (null == sampleMap || sampleMap.isEmpty()) { 
    // do something 
} 
else { 
    // do something else 
} 
+6

Ngoài bất cứ điều gì khác, hãy nghĩ về * tại sao * bạn sử dụng 'null == sampleMap' thay vì' sampleMap == null'. Hầu hết mọi người tìm thấy sau này dễ đọc hơn - trước đây là một sự nắm giữ từ các ngôn ngữ khác. –

+1

nếu bạn quan tâm, có [một số tranh cãi] (http://pushinginertia.com/2011/05/why-yoda-conditions-are-bad-and-usage-of-javas-final-keyword-is- tốt /) về điều @JonSkeet đề cập đến – eis

+0

Nhân tiện, bộ sưu tập null là xấu. Nếu có thể, hãy thay bộ sưu tập trống. 'Xem Java hiệu quả: Mục 43 - Trả lại mảng hoặc bộ sưu tập trống, không phải null.' –

Trả lời

150

Nếu bạn sử dụng thư viện Apache Commons Collections trong dự án của bạn, bạn có thể sử dụng CollectionUtils.isEmptyMapUtils.isEmpty() phương pháp mà lần lượt kiểm tra xem một bộ sưu tập hoặc một bản đồ là trống hoặc rỗng (tức là họ đang "null- an toàn ").

Mã đằng sau các phương pháp này là nhiều hay ít những gì người dùng @icza đã viết trong câu trả lời của anh ấy.

Bất kể bạn làm gì, hãy nhớ rằng bạn viết ít mã hơn, bạn càng cần ít mã để kiểm tra khi độ phức tạp của mã giảm.

+0

Cảm ơn MapUtils.isEmpty là giải pháp hoàn hảo để kiểm tra bản đồ là rỗng hoặc trống –

46

Đó là cách tốt nhất để kiểm tra xem nó. Bạn có thể viết một phương pháp helper để làm điều đó:

public static boolean isNullOrEmpty(final Collection<?> c) { 
    return c == null || c.isEmpty(); 
} 

public static boolean isNullOrEmpty(final Map< ?, ? > m) { 
    return m == null || m.isEmpty(); 
} 
+0

Cũng phải có hàm tương tự cho' Bản đồ '. –

+1

Chắc chắn, bạn cũng có thể thêm một bản đồ cho bản đồ nhưng bộ sưu tập tiêu đề đã nêu. – icza

+1

Tôi không hiểu nếu m là null sau đó .isEmpty() sẽ gây ra NullPointerException rigth? nếu không, nếu bên trái (m == null) là true thì số còn lại sẽ không được kiểm tra – ismail

10

Cá nhân, tôi thích sử dụng bộ sưu tập trống thay vì null và có các thuật toán làm việc theo một cách mà cho các thuật toán nó không quan trọng nếu bộ sưu tập là rỗng hoặc không phải.

2

Nếu bạn cần kiểm tra giá trị rỗng, đó là cách. Tuy nhiên, nếu bạn có quyền kiểm soát này, chỉ cần trả lại bộ sưu tập trống, bất cứ khi nào bạn có thể, và chỉ kiểm tra để trống sau này.

This thread tương tự với C#, nhưng các nguyên tắc cũng áp dụng tốt cho java. Như đã đề cập ở đó, chỉ nên trả về giá trị rỗng nếu

  • null có thể có ý nghĩa cụ thể hơn;
  • API của bạn (hợp đồng) có thể buộc bạn trả về giá trị rỗng.
9

Nếu bạn sử dụng khuôn khổ mùa xuân, sau đó bạn có thể sử dụng để kiểm tra CollectionUtils chống lại cả bộ sưu tập (Danh sách, Array) và Bản đồ, vv

if(CollectionUtils.isEmpty(...)) {...} 
4

Khi bạn sử dụng mùa xuân sau đó bạn có thể sử dụng

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj); 

nơi obj là bất kỳ [bản đồ, bộ sưu tập, mảng, aythink ...]

nếu không: mã là:

public static boolean isEmpty(Object[] array) { 
    return (array == null || array.length == 0); 
} 

public static boolean isEmpty(Object obj) { 
    if (obj == null) { 
     return true; 
    } 

    if (obj.getClass().isArray()) { 
     return Array.getLength(obj) == 0; 
    } 
    if (obj instanceof CharSequence) { 
     return ((CharSequence) obj).length() == 0; 
    } 
    if (obj instanceof Collection) { 
     return ((Collection) obj).isEmpty(); 
    } 
    if (obj instanceof Map) { 
     return ((Map) obj).isEmpty(); 
    } 

    // else 
    return false; 
} 

cho String tốt nhất là:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty()); 
0

Bạn có thể sử dụng org.apache.commons.lang.Validate 's "notEmpty" phương pháp:

Validate.notEmpty(myCollection) -> Validate rằng bộ sưu tập lập luận quy định không phải là null hoặc kích thước của zero (không có yếu tố nào); nếu không thì ném một ngoại lệ.

0

Đối với tất cả các bộ sưu tậpbao gồm việc sử dụng bản đồ: phương pháp isEmpty có trên các đối tượng thu thập này. Nhưng bạn phải thực hiện kiểm tra nulkl trước

Bản đồ bản đồ;

........ if (bản đồ = null & & map.isEmpty()!) ......

1

Nếu bạn đang sử dụng Spring framework bạn có thể sử dụng:

CollectionUtils.isEmpty(Collection collection); 

Phương thức này trả về true nếu Bộ sưu tập được cung cấp là rỗng hoặc trống.

Các vấn đề liên quan