2012-01-26 3 views
1

Collection 프레임 워크는 Collection 객체를위한 "래퍼"라는 "뷰"를 만들 수 있다는 것을 알고 있습니다.
특히 관심이있는 것은 List를 통해 일부 조건과 일치하는 요소의 하위 집합에 대한보기 만 반환한다는 것입니다.
기본적으로, 에뮬레이트하려는 것은 begin 및 end 인덱스를 기반으로하지 않고 요소의 일부 매개 변수에 기반하여 subList() 메서드의 기능입니다.요소의 값에 기반한 subList 뷰

첫 번째 접근법은 단순히 다른 목록을 만들고 첫 번째 목록을 살펴보고 각 요소를 확인하는 것이 었습니다 ...
이것은 실제로 모든 MyObject를 복사하지는 않지만 참조 만 복사하지만 어쨌든 만들 것입니다. 오버 헤드를 가지는 새로운 List 객체 그게 옳지 않아?
가벼운 방법으로 필요한 것을 수행 할 수 있습니까?

N.B. 내 원래 목록

내가 여기서 뭘 우려를 이해하지 못하는 당신에게 모든

답변

4

Guava 모음 (Collections2filter 방법 http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/index.html)을 사용하여 Java에서 쉽게이 작업을 수행 할 수 있습니다.

는 또한 후드 아래에 새 컬렉션을 만들 것입니다

myList.findAll { it.contains("aValue") } 

다음 방법 중 예를

를 들어, findAll 방법을 사용하여 그루비에서이 작업을 수행 할 수 있습니다. 그래서 그들은 요소들을 반복하고 검사하는 작업을하고 있습니다. 새 목록을 만드는 오버 헤드는 최소화됩니다 (하나의 새 객체를 인스턴스화하는 것입니다).

2
I would anyways create a new List object, with its overhead 

감사 ... 정말 큰 모음입니다. source of ArrayList class에서 List 클래스의 subList(int fromIndex, int toIndex) 메소드까지도 새로운 내부 클래스 (List에서 확장)를 만듭니다. 이것이 본질적으로 당신의 메소드에서 할 일입니다. 즉, 새로운 List 인스턴스를 생성하고 일치하는 요소의 참조를 복사합니다. 이 커스텀 메소드는 subList 메소드와 같은 성능을 가지게 될 것입니다.

관련 문제