2016-02-02 55 views
5

Có thể nhận tập con của bộ lọc theo một số bộ so sánh và có mọi cập nhật về bộ sưu tập gốc và tập con của nó có tất cả thay đổi không?Nhận tập hợp con của bộ bằng cách sử dụng bộ so sánh

+0

Bạn có muốn thêm một loại 'trình kích hoạt' vào bộ sưu tập của mình, bộ lọc này có lọc các phần tử được thêm vào danh sách của bạn không? –

+1

Tôi không nghĩ rằng điều này là có thể làm cho một bộ sưu tập thường xuyên, vì lớp học sẽ phải thực hiện một số loại giao diện quan sát được. Hoặc là, hoặc bạn phải kiểm tra tất cả các yếu tố mỗi lần chỉ trong trường hợp một cái gì đó thay đổi trong bộ sưu tập ban đầu. –

+1

'NavigableSet.subSet()' có làm những gì bạn muốn không? –

Trả lời

3

Cuộc gọi NavigableSet.subSet() có thể thực hiện những gì bạn muốn. NavigableSet là tập hợp được sắp xếp có khả năng tạo tập con là "lượt xem" của tập hợp cơ bản. Các chế độ xem này được giới hạn bởi các giá trị mà bạn cung cấp, sử dụng số Comparator được cung cấp khi tạo bộ hoặc thứ tự tự nhiên của các giá trị. Việc triển khai phổ biến nhất là TreeSet. Ví dụ: bạn có thể làm điều này:

NavigableSet<String> set = new TreeSet<>(
     Arrays.asList("b", "e", "a", "d", "c")); 
    System.out.println(set); 

Kết quả là [a, b, c, d, e] như bạn mong muốn. Bây giờ bạn có thể tạo một tập hợp con, ví dụ từ "b" thông qua "d" bao gồm:

NavigableSet<String> set2 = set.subSet("b", true, "d", true); 
    System.out.println(set2); 

Ở đây, đầu ra là [b, c, d]. Bây giờ nếu bạn thêm một số yếu tố để các thiết lập ban đầu mà là cả bên trong và bên ngoài các giới hạn, những thay đổi quan điểm tập hợp con để chỉ bao gồm những gì đang được thêm vào bên trong:

set.add("a1"); 
    set.add("c1"); 
    set.add("e1"); 
    System.out.println(set2); 

Đầu ra là [b, c, c1, d].

+0

Ok, và những gì tôi muốn là tạo ra tập con không phải với việc cung cấp từ "b" đến "d", nhưng bởi một số so sánh tức là tập con chọn cho tôi mỗi giây. Tôi đoán rằng việc lựa chọn không liên tục là khó khăn nên không có những người chung chung như vậy. Nhưng nếu TreeSet có nghĩa là so sánh chia các phần tử trên i.e lẻ và thậm chí. Tôi muốn subSet phần đầu tiên hoặc thứ hai với việc sử dụng so sánh đó. – userbb

+0

@userbb OK, tôi không nghĩ rằng so sánh TreeSet có thể làm những gì bạn muốn. Bộ so sánh thiết lập một * tổng số thứ tự * của tất cả các phần tử trong tập hợp, và nó là một thuộc tính cố định của tập hợp, được thiết lập tại thời điểm tạo. Bạn không thể đặt nó trong một hoạt động truy vấn, ví dụ. Nghe có vẻ như bạn cần một cái gì đó giống như một bộ lọc với một vị từ, nhưng tôi nghĩ bạn cần phải giải thích trường hợp sử dụng của bạn chi tiết hơn. Tôi và những người khác đang làm một chút công bằng của đoán. –

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