Tôi sử dụng tiện ích tùy chỉnh của mình để bỏ Bộ sưu tập hiện có nếu có.
Chủ yếu:
public static <T> Collection<T> toCollection(Iterable<T> iterable) {
if (iterable instanceof Collection) {
return (Collection<T>) iterable;
} else {
return Lists.newArrayList(iterable);
}
}
Lý tưởng nhất là ở trên sẽ sử dụng ImmutableList, nhưng ImmutableCollection không cho phép null có thể cung cấp kết quả không mong muốn.
Các xét nghiệm:
@Test
public void testToCollectionAlreadyCollection() {
ArrayList<String> list = Lists.newArrayList(FIRST, MIDDLE, LAST);
assertSame("no need to change, just cast", list, toCollection(list));
}
@Test
public void testIterableToCollection() {
final ArrayList<String> expected = Lists.newArrayList(FIRST, null, MIDDLE, LAST);
Collection<String> collection = toCollection(new Iterable<String>() {
@Override
public Iterator<String> iterator() {
return expected.iterator();
}
});
assertNotSame("a new list must have been created", expected, collection);
assertTrue(expected + " != " + collection, CollectionUtils.isEqualCollection(expected, collection));
}
Tôi triển khai các tiện ích tương tự cho tất cả các kiểu con của Bộ sưu tập (Bộ, Danh sách, v.v.). Tôi nghĩ những thứ này đã là một phần của ổi, nhưng tôi không tìm thấy nó.