2011-01-14 49 views
21

Trong câu lệnh if trong Java làm cách nào tôi có thể kiểm tra xem một đối tượng có tồn tại trong một tập hợp các mục hay không. Ví dụ. Trong trường hợp này, tôi cần xác nhận rằng quả sẽ là quả táo, cam hoặc chuối.Làm cách nào để kiểm tra xem một phần tử có tồn tại trong một Tập hợp các mục không?

if (fruitname in ["APPLE", "ORANGES", "GRAPES"]) { 
    //Do something 
} 

Đó là một điều rất nhỏ nhưng tôi không thể tìm ra cách ngắn gọn và súc tích để thực hiện việc này.

Trả lời

33
static final List<String> fruit = Arrays.asList("APPLE", "ORANGES", "GRAPES"); 

if (fruit.contains(fruitname)) 

Nếu danh sách của bạn lớn hơn nhiều, tập hợp sẽ hiệu quả hơn.

static final Set<String> fruit = new HashSet<String>(
     Arrays.asList("APPLE", "ORANGES", "GRAPES", /*many more*/)); 
+0

Cũng có thể làm cho nó một 'Set'. Có vẻ thích hợp hơn. – wds

+0

@wds Không thực sự có phương thức Arrays.asSet, và nếu đây là chỉ sử dụng cho bộ sưu tập thì bước chuyển đổi bổ sung (thành Đặt) sẽ không có vẻ đáng để thử. – extraneon

+0

Không dành cho danh sách có ba mục nhập. Đối với nhiều mục hơn nó có thể là giá trị nó. –

2

Arrays.binarySearch bạn đang tìm gì?

String [] fruits = new String[]{"APPLE", "ORANGES", "GRAPES"}; 
Arrays.sort(fruits); // binarySearch requires that the array is sorted 

if (Arrays.binarySearch(fruits), fruitname) >= 0) { 
    // found! 
} 

Và dĩ nhiên là đáng tin cậy Apache Commons ArrayUtils:

if (ArrayUtils.contains(new String[]{"APPLE", "ORANGES", "GRAPES"}, fruitname){ 
    // found 
} 

tôi biết sẽ có một cái gì đó trong Apache Commons :)

+3

tìm kiếm nhị phân giả định mảng được sắp xếp, tôi nhớ O đến sau G;) –

+0

Tôi nhận thấy :) Vì vậy, tôi đã thêm một sắp xếp. Tôi thích giải pháp của bạn tốt hơn mặc dù (đó là upvote :) – extraneon

+0

@peter: có một Array.sort() trong đó;) – fasseg

6

cho đầy đủ sử dụng google-bộ sưu tập/ổi:

import com.google.common.collect.Sets; 

static final Set<String> fruit = Sets.newHashSet("APPLE", "ORANGES", "GRAPES"); 

if (fruit.contains(fruitname)) 

hoặc sử dụng các lớp jdk cũ của máy bay:

static final Set<String> fruit = new HashSet<String>(Arrays.asList("APPLE", "ORANGES", "GRAPES")); 
0

Nếu bạn có Đặt, Danh sách, Bản đồ các loại trái cây có cùng bố mẹ: Bộ sưu tập, bạn có thể thử ví dụ này.

String fruitName = "Orange"; 
Collection<String> fruits = ... // set of fruits 
if (fruits.contains(fruitName)) { 
    ... 
} 

Nhưng bạn phải chú ý về trường hợp nhạy cảm (Orange! = Màu cam)

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