4 package net
.kezvh
.collections
.views
;
6 import java
.util
.AbstractCollection
;
7 import java
.util
.Collection
;
8 import java
.util
.Iterator
;
10 import net
.kezvh
.functional
.Operations
;
11 import net
.kezvh
.functional
.lambda
.L1
;
16 * @param <E> collection element type
18 public class ConditionalCollectionView
<E
> extends AbstractCollection
<E
> {
19 private final Collection
<?
extends E
> innerCollection
;
20 private final L1
<Boolean
, ?
super E
> filter
;
23 * @param predicate condition
24 * @param innerCollection original elements
26 public ConditionalCollectionView(final L1
<Boolean
, ?
super E
> predicate
, final Collection
<?
extends E
> innerCollection
) {
28 this.filter
= predicate
;
29 this.innerCollection
= innerCollection
;
33 * @see java.util.AbstractCollection#iterator()
37 public Iterator
<E
> iterator() {
38 return new ConditionalIteratorView
<E
>(this.filter
, this.innerCollection
.iterator());
42 * @see java.util.AbstractCollection#size()
43 * @return the size of the collection
47 return Operations
.ITERATOR_COUNT
.op(this.iterator());