2010-09-13 43 views
44

Tôi muốn đếm số lượng itemid trong mảng của mình, tôi có thể lấy ví dụ về cách tôi muốn thêm mã này vào mã của tôi hay không. mã dưới đây;Đếm số lượng mục trong danh sách mảng của tôi

if (value != null && !value.isEmpty()) { 
    Set set = value.keySet(); 
    Object[] key = set.toArray(); 
    Arrays.sort(key); 

    for (int i = 0; i < key.length; i++) { 
     ArrayList list = (ArrayList) value.get((String) key[i]); 

     if (list != null && !list.isEmpty()) { 
      Iterator iter = list.iterator(); 
      double itemValue = 0; 
      String itemId = ""; 

      while (iter.hasNext()) { 
       Propertyunbuf p = (Propertyunbuf) iter.next(); 
       if (p != null) { 
        itemValue = itemValue + p.getItemValue().doubleValue(); 
        itemId = p.getItemId(); 
       } 

       buf2.append(NL); 
       buf2.append("     " + itemId); 

      } 

      double amount = itemValue; 
      totalAmount += amount; 
     } 
    } 
} 
+5

Tôi không nghĩ rằng câu hỏi sẽ khớp tốt với mã mẫu. Bạn đang tìm kiếm số itemIds 'khác biệt' hoặc tương tự? –

Trả lời

103

Số itemId s trong danh sách của bạn sẽ giống như số lượng các phần tử trong danh sách của bạn:

int itemCount = list.size(); 

Tuy nhiên, nếu bạn đang tìm kiếm để đếm số itemIds độc đáo (mỗi @pst) thì bạn nên sử dụng một bộ để theo dõi chúng.

Set<String> itemIds = new HashSet<String>(); 

//... 
itemId = p.getItemId(); 
itemIds.add(itemId); 

//... later ... 
int uniqueItemIdCount = itemIds.size(); 
2

Bên ngoài vòng lặp của bạn tạo ra một int:

int numberOfItemIds = 0; 
for (int i = 0; i < key.length; i++) { 

Sau đó, trong vòng lặp, tăng nó:

itemId = p.getItemId(); 
numberOfItemIds++; 
+0

Chết tiệt. Tôi nghĩ Mark Peters đã đăng một giải pháp tốt hơn ngay trước khi tôi làm. – Freiheit

+0

Vâng, nó không có ý nghĩa để cố gắng đếm từng bước thông qua một vòng lặp khi bạn đã có chiều dài của mảng ban đầu. – StriplingWarrior

0

Điều duy nhất tôi sẽ thêm vào giải pháp Đánh dấu Peters là bạn không cần phải lặp qua ArrayList - bạn sẽ có thể sử dụng phương thức addAll (Collection) trên Set. Bạn chỉ cần lặp qua toàn bộ danh sách để thực hiện tổng kết.

+0

Danh sách chứa các đối tượng 'Propertyunbuf' trong khi tập hợp mong muốn chứa Strings. Bạn không thể sử dụng addAll từ cái này sang cái khác ... bạn sẽ cần thứ gì đó giống như biến đổi của Google Collection để làm điều đó. –

+0

Điểm tốt. Mặc dù tôi tin rằng nếu phương thức equals() của đối tượng Propertyunbuf đã sử dụng itemId, bạn có thể khai báo tập hợp của bạn như một tập hợp Propertyunbuf và nhận được kết quả tương tự. Tôi vẫn thích cách tiếp cận của bạn tốt hơn - Tôi chỉ muốn khám phá các tùy chọn và lựa chọn thay thế :) – BigMac66

12

Bạn muốn đếm số lượng itemid trong mảng của mình. Chỉ cần sử dụng:

int counter=list.size(); 

Ít mã tăng hiệu quả. Không chạy bánh xe của tổ tiên ...

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