Package org.eclipse.m2m.atl.emftvm.util
Class LazyCollection<E>
- java.lang.Object
-
- org.eclipse.m2m.atl.emftvm.util.LazyCollection<E>
-
- Type Parameters:
E
- the collection element type
- All Implemented Interfaces:
java.lang.Iterable<E>
,java.util.Collection<E>
- Direct Known Subclasses:
LazyBag
,LazyList
,LazyOrderedSet
,LazySet
public abstract class LazyCollection<E> extends java.lang.Object implements java.util.Collection<E>
ImmutableCollection
that supports lazy evaluation. Based on the OCL 2.2 specification (formal/2010-02-01).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
LazyCollection.AppendIterator
Iterator
that appends an object to the underlying collection.class
LazyCollection.CachingIterator
LazyCollection.ReadOnlyIterator
that caches values of the underlying collection.class
LazyCollection.CachingSetIterator
LazyCollection.ReadOnlyIterator
that removes duplicate values from the underlying collection.static class
LazyCollection.CollectIterator<T>
LazyCollection.ReadOnlyIterator
that collects the results of evaluating a function on each of the elements from the underlying collection.class
LazyCollection.ExcludingIterator
LazyCollection.ReadOnlyIterator
that excludes a given object.class
LazyCollection.FilterIterator
LazyCollection.ReadOnlyIterator
that filters elements from the underlying collection by evaluating a condition function on them.static class
LazyCollection.FlattenIterator
Recursively flattens any nestedIterable
s by iterating over their elements as well.static class
LazyCollection.FlattenSetIterator
Recursively flattens any nestedIterable
s by iterating over their elements as well.static class
LazyCollection.IntegerRangeListIterator
LazyCollection.ReadOnlyIterator
forInteger
ranges.class
LazyCollection.IntersectionIterator
LazyCollection.ReadOnlyIterator
that returns only elements contained in both underlying collections.class
LazyCollection.IteratorToListIterator
Converts anIterator
to aListIterator
.static class
LazyCollection.LongRangeListIterator
LazyCollection.ReadOnlyIterator
forLong
ranges.static class
LazyCollection.ReadOnlyIterator<E>
Iterator
withoutLazyCollection.ReadOnlyIterator.remove()
.static class
LazyCollection.ReadOnlyListIterator<E>
class
LazyCollection.RejectIterator
LazyCollection.FilterIterator
that rejects elements from the underlying collection by evaluation a condition function on them.class
LazyCollection.ReverseIterator
LazyCollection.ReadOnlyIterator
that returns the values of the underlying collection in reverse order.class
LazyCollection.ReverseListIterator
LazyCollection.ReadOnlyIterator
that returns the values of the underlying collection in reverse order.class
LazyCollection.SelectIterator
LazyCollection.FilterIterator
that selects elements from the underlying collection by evaluation a condition function on them.class
LazyCollection.SubListIterator
Iterator
that iterates over a subrange of the underlyingLazyList
's contents.class
LazyCollection.SubListListIterator
Iterator
that iterates over a subrange of the underlyingLazyList
's contents.class
LazyCollection.SubtractionIterator
LazyCollection.ReadOnlyIterator
that returns elements contained in this underlying collection, but not in the other underlying collection.class
LazyCollection.UnionIterator
Iterator
that returns first the elements of the underlying collection, then the elements of the other collection.class
LazyCollection.UnionSetIterator
Iterator
that returns first the elements of the underlying collection, then the elements of the other collection, with all duplicates removed.class
LazyCollection.WrappedIterator
AbstractLazyCollection.ReadOnlyIterator
that wraps around the underlying collection.class
LazyCollection.WrappedListIterator
AbstractLazyCollection.ReadOnlyListIterator
that wraps around the underlying collection.
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Collection<E>
cache
Element cache.protected java.lang.Iterable<E>
dataSource
The inner data source for this collection.protected java.util.Map<E,java.lang.Integer>
occurrences
Cached element occurrence map.
-
Constructor Summary
Constructors Constructor Description LazyCollection()
Creates an emptyLazyCollection
.LazyCollection(java.lang.Iterable<E> dataSource)
Creates aLazyCollection
arounddataSource
.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description boolean
add(E o)
Unsupported.boolean
addAll(java.util.Collection<? extends E> c)
Unsupported.E
any(CodeBlock body)
Returns any element in the source collection for whichbody
evaluates totrue
.protected java.lang.StringBuffer
appendElements(java.lang.StringBuffer buf, ExecEnv env)
Appends the elements of this collection tobuf
.LazyBag<E>
asBag()
Returns the Bag containing all the elements from self, including duplicates.LazyOrderedSet<E>
asOrderedSet()
Returns an OrderedSet that contains all the elements from self, in undefined order, with duplicates removed.LazyList<E>
asSequence()
Returns a Sequence that contains all the elements from self, in undefined order.LazySet<E>
asSet()
Returns the Set containing all the elements from self, with duplicated removed.abstract java.lang.String
asString(ExecEnv env)
Evaluates the collection as an OCL String.void
clear()
Unsupported.boolean
contains(java.lang.Object o)
boolean
containsAll(java.util.Collection<?> c)
boolean
containsAny(java.util.Collection<?> c)
Checks if this collection contains any of the elements in the specified collection.int
count(java.lang.Object object)
Returns the number of times thatobject
occurs in the collection self.protected void
createCache()
Creates the cache collections.boolean
excludes(java.lang.Object object)
Returnstrue
ifobject
is not an element of self,false
otherwise.boolean
excludesAll(java.util.Collection<?> c2)
Does self contain none of the elements ofc2
?abstract LazyCollection<E>
excluding(java.lang.Object object)
Returns the collection containing all elements of self apart from all occurrences ofobject
.abstract LazyCollection<E>
excludingAll(java.util.Collection<?> coll)
Returns the collection containing all elements of self minuscoll
.boolean
exists(CodeBlock condition)
Checks ifcondition
holds for at least one element in the underlying collection.boolean
exists2(CodeBlock condition)
Checks ifcondition
holds for at least one element pair in the cartesian product of the underlying collection.boolean
forAll(CodeBlock condition)
Checks ifcondition
holds for all elements in the underlying collection.boolean
forAll2(CodeBlock condition)
Checks ifcondition
holds for all element pairs in the cartesian product of the underlying collection.boolean
includes(java.lang.Object object)
Returnstrue
ifobject
is an element of self,false
otherwise.boolean
includesAll(java.util.Collection<?> c2)
Does self contain all the elements ofc2
?abstract LazyCollection<E>
including(E object)
Returns the collection containing all elements of self plusobject
.abstract LazyCollection<E>
including(E object, int index)
Returns the collection containing all elements of self plusobject
.abstract LazyCollection<E>
includingAll(java.util.Collection<? extends E> coll)
Returns the collection containing all elements of self pluscoll
.abstract LazyCollection<E>
includingAll(java.util.Collection<? extends E> coll, int index)
Returns the collection containing all elements of self pluscoll
.abstract LazyCollection<E>
includingRange(E first, E last)
Returns the collection containing all elements of self plus the collection offirst
running tolast
.boolean
isEmpty()
boolean
isUnique(CodeBlock body)
Results intrue
ifbody
evaluates to a different value for each element in the source collection; otherwise, result isfalse
.<T> T
iterate(T initialValue, CodeBlock updater)
Builds an accumulated value by calling theupdater
function for each element in the underlying collection and the previous accumulated value.java.util.Iterator<E>
iterator()
java.util.Map<java.lang.Object,LazySet<E>>
mappedBy(CodeBlock body)
Returns a Map indexed by the return value(s)x
of the body expression, containing the Set of elements for which the body expression returnsx
.java.util.Map<java.lang.Object,E>
mappedBySingle(CodeBlock body)
Returns a Map indexed by the return value(s)x
of the body expression, containing a single element for which the body expression returnsx
.E
max()
The element with the maximum value of all elements in self.E
min()
The element with the minimum value of all elements in self.boolean
notEmpty()
Is self not the empty collection?boolean
one(CodeBlock body)
Results intrue
if there is exactly one element in the source collection for whichbody
istrue
.<T> LazySet<Tuple>
product(java.lang.Iterable<T> c2)
The cartesian product operation ofself
andc2
.boolean
remove(java.lang.Object o)
Unsupported.boolean
removeAll(java.util.Collection<?> c)
Unsupported.boolean
retainAll(java.util.Collection<?> c)
Unsupported.int
size()
abstract LazyCollection<E>
sortedBy(CodeBlock body)
Results in the Collection containing all elements of the source collection.E
sum()
The addition of all elements in self.java.lang.Object[]
toArray()
<T> T[]
toArray(T[] a)
java.lang.String
toString()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
-
-
-
Field Detail
-
dataSource
protected java.lang.Iterable<E> dataSource
The inner data source for this collection. Is set tonull
when cache is complete.
-
cache
protected java.util.Collection<E> cache
Element cache.
-
occurrences
protected java.util.Map<E,java.lang.Integer> occurrences
Cached element occurrence map.
-
-
Constructor Detail
-
LazyCollection
public LazyCollection(java.lang.Iterable<E> dataSource)
Creates aLazyCollection
arounddataSource
.- Parameters:
dataSource
- the underlying collection
-
LazyCollection
public LazyCollection()
Creates an emptyLazyCollection
.
-
-
Method Detail
-
createCache
protected void createCache()
Creates the cache collections.
-
add
public boolean add(E o)
Unsupported.- Specified by:
add
in interfacejava.util.Collection<E>
- Parameters:
o
- the element to add- Returns:
- nothing
- Throws:
java.lang.UnsupportedOperationException
-
addAll
public boolean addAll(java.util.Collection<? extends E> c)
Unsupported.- Specified by:
addAll
in interfacejava.util.Collection<E>
- Parameters:
c
- the collection to add- Returns:
- nothing
- Throws:
java.lang.UnsupportedOperationException
-
clear
public void clear()
Unsupported.- Specified by:
clear
in interfacejava.util.Collection<E>
- Throws:
java.lang.UnsupportedOperationException
-
contains
public boolean contains(java.lang.Object o)
- Specified by:
contains
in interfacejava.util.Collection<E>
-
containsAll
public boolean containsAll(java.util.Collection<?> c)
- Specified by:
containsAll
in interfacejava.util.Collection<E>
-
containsAny
public boolean containsAny(java.util.Collection<?> c)
Checks if this collection contains any of the elements in the specified collection.- Parameters:
c
- collection to be checked for containment in this collection.- Returns:
true
if this collection contains any of the elements in the specified collection.
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty
in interfacejava.util.Collection<E>
-
iterator
public java.util.Iterator<E> iterator()
-
remove
public boolean remove(java.lang.Object o)
Unsupported.- Specified by:
remove
in interfacejava.util.Collection<E>
- Parameters:
o
- the element to remove- Returns:
- nothing
- Throws:
java.lang.UnsupportedOperationException
-
removeAll
public boolean removeAll(java.util.Collection<?> c)
Unsupported.- Specified by:
removeAll
in interfacejava.util.Collection<E>
- Parameters:
c
- the collection to remove- Returns:
- nothing
- Throws:
java.lang.UnsupportedOperationException
-
retainAll
public boolean retainAll(java.util.Collection<?> c)
Unsupported.- Specified by:
retainAll
in interfacejava.util.Collection<E>
- Parameters:
c
- the collection to retain- Returns:
- nothing
- Throws:
java.lang.UnsupportedOperationException
-
size
public int size()
- Specified by:
size
in interfacejava.util.Collection<E>
-
toArray
public java.lang.Object[] toArray()
- Specified by:
toArray
in interfacejava.util.Collection<E>
-
toArray
public <T> T[] toArray(T[] a)
- Specified by:
toArray
in interfacejava.util.Collection<E>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
asString
public abstract java.lang.String asString(ExecEnv env)
Evaluates the collection as an OCL String.- Parameters:
env
- the execution environment- Returns:
- the String representation of this
LazyCollection
.
-
appendElements
protected java.lang.StringBuffer appendElements(java.lang.StringBuffer buf, ExecEnv env)
Appends the elements of this collection tobuf
.- Parameters:
buf
- theStringBuffer
to add the elements' string representation toenv
- the execution environment- Returns:
- buf
-
includes
public boolean includes(java.lang.Object object)
Returnstrue
ifobject
is an element of self,false
otherwise.- Parameters:
object
- the object to check for- Returns:
true
ifobject
is an element of self,false
otherwise.
-
excludes
public boolean excludes(java.lang.Object object)
Returnstrue
ifobject
is not an element of self,false
otherwise.- Parameters:
object
- the object to check for- Returns:
true
ifobject
is not an element of self,false
otherwise.
-
count
public int count(java.lang.Object object)
Returns the number of times thatobject
occurs in the collection self.- Parameters:
object
- the object to check for- Returns:
- The number of times that
object
occurs in the collection self.
-
includesAll
public boolean includesAll(java.util.Collection<?> c2)
Does self contain all the elements ofc2
?- Parameters:
c2
- the collection to check- Returns:
true
iff self contains all elements ofc2
.
-
excludesAll
public boolean excludesAll(java.util.Collection<?> c2)
Does self contain none of the elements ofc2
?- Parameters:
c2
- the collection to check- Returns:
true
iff self contains no elements ofc2
.
-
notEmpty
public boolean notEmpty()
Is self not the empty collection?- Returns:
false
iff self contains no elements.
-
max
public E max()
The element with the maximum value of all elements in self. Elements must be of a type supporting the max operation. The max operation - supported by the elements - must take one parameter of typeE
and be both associative and commutative. Integer and Real fulfill this condition.- Returns:
- The element with the maximum value of all elements in self.
-
min
public E min()
The element with the minimum value of all elements in self. Elements must be of a type supporting the min operation. The min operation - supported by the elements - must take one parameter of type T and be both associative and commutative. Integer and Real fulfill this condition.- Returns:
- The element with the minimum value of all elements in self.
-
sum
public E sum()
The addition of all elements in self. Elements must be of a type supporting the + operation. The + operation must take one parameter of typeE
and be both associative: (a+b)+c = a+(b+c), and commutative: a+b = b+a. Integer and Real fulfill this condition.- Returns:
self->iterate( elem; acc : E = 0 | acc + elem )
-
product
public <T> LazySet<Tuple> product(java.lang.Iterable<T> c2)
The cartesian product operation ofself
andc2
.Lazy operation.
- Type Parameters:
T
- the element type- Parameters:
c2
- the other factor in the cartesian product- Returns:
self->iterate (e1; acc: Set(Tuple(first: T, second: T2)) = Set{} |
c2->iterate (e2; acc2: Set(Tuple(first: T, second: T2)) = acc |
acc2->including (Tuple{first = e1, second = e2}) ) )
-
asBag
public LazyBag<E> asBag()
Returns the Bag containing all the elements from self, including duplicates.Lazy operation.
- Returns:
- The Bag containing all the elements from self, including duplicates.
-
asSequence
public LazyList<E> asSequence()
Returns a Sequence that contains all the elements from self, in undefined order.Lazy operation.
- Returns:
- A Sequence that contains all the elements from self, in undefined order.
-
asSet
public LazySet<E> asSet()
Returns the Set containing all the elements from self, with duplicated removed.Lazy operation.
- Returns:
- The Set containing all the elements from self, with duplicated removed.
-
asOrderedSet
public LazyOrderedSet<E> asOrderedSet()
Returns an OrderedSet that contains all the elements from self, in undefined order, with duplicates removed.Lazy operation.
- Returns:
- An OrderedSet that contains all the elements from self, in undefined order, with duplicates removed.
-
including
public abstract LazyCollection<E> including(E object)
Returns the collection containing all elements of self plusobject
.Lazy operation.
- Parameters:
object
- the object to include- Returns:
- The collection containing all elements of self plus
object
.
-
including
public abstract LazyCollection<E> including(E object, int index)
Returns the collection containing all elements of self plusobject
.Lazy operation.
- Parameters:
object
- the object to includeindex
- the index at which to insertcoll
(starting at 1)- Returns:
- The collection containing all elements of self plus
object
.
-
includingAll
public abstract LazyCollection<E> includingAll(java.util.Collection<? extends E> coll)
Returns the collection containing all elements of self pluscoll
.Lazy operation.
- Parameters:
coll
- the collection to include- Returns:
- The collection containing all elements of self plus
coll
.
-
includingAll
public abstract LazyCollection<E> includingAll(java.util.Collection<? extends E> coll, int index)
Returns the collection containing all elements of self pluscoll
.Lazy operation.
- Parameters:
coll
- the collection to includeindex
- the index at which to insertcoll
(starting at 1)- Returns:
- The collection containing all elements of self plus
coll
.
-
excluding
public abstract LazyCollection<E> excluding(java.lang.Object object)
Returns the collection containing all elements of self apart from all occurrences ofobject
.Lazy operation.
- Parameters:
object
- the object to exclude- Returns:
- The collection containing all elements of self apart from all occurrences of
object
.
-
excludingAll
public abstract LazyCollection<E> excludingAll(java.util.Collection<?> coll)
Returns the collection containing all elements of self minuscoll
.Lazy operation.
- Parameters:
coll
- the collection to exclude- Returns:
- The collection containing all elements of self minus
coll
.
-
includingRange
public abstract LazyCollection<E> includingRange(E first, E last)
Returns the collection containing all elements of self plus the collection offirst
running tolast
.Lazy operation.
- Parameters:
first
- the first object of the range to includelast
- the last object of the range to include- Returns:
- The collection containing all elements of self plus the collection of
first
running tolast
-
forAll
public boolean forAll(CodeBlock condition)
Checks ifcondition
holds for all elements in the underlying collection.- Parameters:
condition
- the condition function- Returns:
true
iffcondition
holds for all elements in the underlying collection.
-
forAll2
public boolean forAll2(CodeBlock condition)
Checks ifcondition
holds for all element pairs in the cartesian product of the underlying collection.- Parameters:
condition
- the condition function- Returns:
true
iffcondition
holds for all element pairs in the cartesian product of the underlying collection.
-
exists
public boolean exists(CodeBlock condition)
Checks ifcondition
holds for at least one element in the underlying collection.- Parameters:
condition
- the condition function- Returns:
true
iffcondition
holds for at least one element in the underlying collection.
-
exists2
public boolean exists2(CodeBlock condition)
Checks ifcondition
holds for at least one element pair in the cartesian product of the underlying collection.- Parameters:
condition
- the condition function- Returns:
true
iffcondition
holds for at least one element pair in the cartesian product of the underlying collection.
-
iterate
public <T> T iterate(T initialValue, CodeBlock updater)
Builds an accumulated value by calling theupdater
function for each element in the underlying collection and the previous accumulated value.- Type Parameters:
T
- the element type- Parameters:
initialValue
- the initial accumulated valueupdater
- the updater function- Returns:
- The accumulated value
-
isUnique
public boolean isUnique(CodeBlock body)
Results intrue
ifbody
evaluates to a different value for each element in the source collection; otherwise, result isfalse
.- Parameters:
body
- the code to execute on each element- Returns:
true
ifbody
evaluates to a different value for each element in the source collection.
-
any
public E any(CodeBlock body) throws java.util.NoSuchElementException
Returns any element in the source collection for whichbody
evaluates totrue
. If there is more than one element for whichbody
istrue
, one of them is returned. There must be at least one element fulfillingbody
.- Parameters:
body
- the function to evaluate on each element- Returns:
- any element in the source collection for which body evaluates to
true
. - Throws:
java.util.NoSuchElementException
- if there is no element in the source collection for whichbody
istrue
.
-
one
public boolean one(CodeBlock body)
Results intrue
if there is exactly one element in the source collection for whichbody
istrue
.- Parameters:
body
- the function to evaluate on each element- Returns:
true
if there is exactly one element in the source collection for whichbody
istrue
.
-
sortedBy
public abstract LazyCollection<E> sortedBy(CodeBlock body)
Results in the Collection containing all elements of the source collection. The element for which body has the lowest value comes first, and so on. The type of the body expression must have the<
operation defined. The<
operation must return a Boolean value and must be transitive (i.e., ifa < b
andb < c
thena < c
).- Parameters:
body
- the function to evaluate on each element- Returns:
- the sorted collection
-
mappedBy
public java.util.Map<java.lang.Object,LazySet<E>> mappedBy(CodeBlock body)
Returns a Map indexed by the return value(s)x
of the body expression, containing the Set of elements for which the body expression returnsx
.- Parameters:
body
- the function to evaluate on each element- Returns:
- the Map
-
mappedBySingle
public java.util.Map<java.lang.Object,E> mappedBySingle(CodeBlock body)
Returns a Map indexed by the return value(s)x
of the body expression, containing a single element for which the body expression returnsx
.- Parameters:
body
- the function to evaluate on each element- Returns:
- the Map
-
-