나는 판매의 개체 목록을 가지고 있습니다. Product가 다른 목록의 상품과 일치하는 Sales 오브젝트 만 원한다고하자. 예를 들어 saleProductList.java 가장 좋은 방법은 개체의 목록을 필터링
루핑 이외에도 더 좋은 방법이 있습니다.
나는 판매의 개체 목록을 가지고 있습니다. Product가 다른 목록의 상품과 일치하는 Sales 오브젝트 만 원한다고하자. 예를 들어 saleProductList.java 가장 좋은 방법은 개체의 목록을 필터링
루핑 이외에도 더 좋은 방법이 있습니다.
이미 Google의 Guava 라이브러리를 사용하고 있다면 Collections2.filter() 메소드가 있습니다.이 메소드는 지정된 Predicate과 일치하는 컬렉션의 항목 만 반환합니다.
그러나이 질문에 대한 답이 루핑을 피하는 동기가 무엇인지에 따라 다릅니다. Java 콜렉션에는이 기능이 내장되어 있지 않으므로 방법은 일부 레벨에서 모든 요소를 반복하는 것입니다. Guava는 이것을 내부적으로 수행하지만 수동으로 수행하는 것과 동일한 루프를 계속 수행하고 있으며 더 좋은 API로 마무리했습니다.
Apache commons library의 Collections
방법을 사용할 수 있습니다. 그러나 그 방법은 당신을 위해 루프를 수행합니다. 당신이 필요로하는 것을 시도 할 때 당신은 그것을 피할 수 없습니다.
코드를 간단하고 이해하기 쉽게 만드는 대체 기능과 같은 기능이 있지만 내부적으로 목록을 반복해야 할 수 있습니다. 그러나 클라이언트가 항상 이것을 사용하지 않을 가능성이 있다면 그들은 좋은 필터링을 실행합니다. 필터 (...) 메소드가 바로 당신을위한 경우
확인 : 어떤 수준에서 Iterables.filter(Iterable, Predicate)
은, 루프는 필연적으로 포함됩니다.
두 데이터 구조가 목록 인 경우 비용은 두 목록 길이의 PRODUCT에 비례합니다. 목록이 클 경우 매우 비쌀 수 있습니다.
이 문제를 방지하려면 목록 중 하나 또는 둘 모두를 간단한 목록보다 빠른 조회를 제공하는 일부 데이터 구조로 나타내야합니다.
나는이 개 솔루션
jakarta collection framework에서사용 조건을 건의 할 것입니다.
다른 술어가있을 수 있습니다. 그것들을 결합하여 매우 정교한 필터를 만들 수 있습니다.
내 기사 읽기 : http://java.dzone.com/articles/useful-abuse, 하위 제목 "필터 패턴 구현"을 검색하십시오.
이 정보가 도움이되기를 바랍니다. 이 당신에게 적절한 목록을 제공 않지만
List result1 = Lists.newArrayList(Collections2.filter(originalList,filterPredicate));
List result2 = Lists.newLinkedList(Collections2.filter(originalList,filterPredicate));
, 그들은 즉시 저장 오버 헤드와 반복 시간 오버 헤드가 발생 : 구글의 collections libray가 사용
. 오히려 그 ("게으른"평가)를 연기하려는 경우 직렬 액세스에 대한의 Iterable 또는 Iterator를 사용할 수 있습니다
이Iterable result3 = Iterables.filter(originalList,filterPredicate)); // Pangea's solution
Iterator result4 = Iterators.filter(originalList.iterator(),filterPredicate));
(나는 독자에게 연습으로 유형의 파라미터를 둡니다.)
I을 고정하고 (깨진) 링크를 포맷.Javadoc 메소드 링크에는 이스케이프해야하는 문자가 포함되어 있습니다. 또한 Google Collections는 현재 구아바의 일부입니다. –