9

Tôi có một số List<Object> và tôi muốn trả về giá trị đầu tiên mà nó tìm thấy đúng khớp với vị từ.CollectionUtils trong java bằng cách sử dụng vị từ

Tôi thấy rằng tôi có thể sử dụng CollectionUtils.find(collection,predicate) (Apache commons). Giả sử rằng Object chứa một biến số nguyên được gọi là: value, làm thế nào để tôi xác định trong vị ngữ rằng giá trị có thể là 1,2,3,4,5 và loại bỏ những người không phù hợp. Có thể làm 'chứa'.

Cũng không sử dụng java 8 để không thể phát trực tuyến.

+0

commache commons .. –

Trả lời

22

Để trở về phần tử đầu tiên trong danh sách mà phù hợp với vị đưa ra:

MyObject res = CollectionUtils.find(myList, new Predicate<MyObject>() { 
    @Override 
    public boolean evaluate(MyObject o) { 
     return o.getValue() >= 1 && o.getValue() <= 5; 
    } 
}); 

Để lọc danh sách để nó chỉ chứa các yếu tố phù hợp với vị:

CollectionUtils.filter(myList, new Predicate<MyObject>() { 
    @Override 
    public boolean evaluate(MyObject o) { 
     return o.getValue() >= 1 && o.getValue() <= 5; 
    } 
}); 

Bạn có thể nhận thấy rằng Predicate<MyObject> giống nhau.

+0

Tôi nghĩ rằng OP muốn lọc danh sách ('loại bỏ những người không phù hợp'). Bạn chỉ đang tìm đối tượng đầu tiên khớp với vị từ. – Dici

+4

Đáng lưu ý rằng "Predicate" chung chỉ có trong phiên bản 4 – blgt

+0

@Dici, bạn có thể đúng. Tôi không chắc chắn 100% những gì OP muốn làm ... –

0

Bạn có thể sử dụng Collections.removeIf (Tôi giả sử bạn đang sử dụng JDK 8). Bạn cũng có thể sử dụng Luồng:

list = list.stream().filter(predicate).collect(Collectors.toList()); 

Sử dụng bộ sưu tập Apach Commons, bạn có thể sử dụng CollectionUtils.filter.

+0

Thật không may tôi không, đó là lý do tại sao tôi chọn sử dụng CollectionUtils. –

5

Trong Java 8 bạn có thể viết

Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny(); 

Trước Java 7 là giải pháp đơn giản nhất là sử dụng một vòng lặp.

Integer found = null; 
for(integer i : list) 
    if (i >= 1 && i <= 5) { 
     found = i; 
     break; 
    } 

Đây sẽ là cách sạch nhất và nhanh nhất khi Java 7 không hỗ trợ cho lambdas.

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