com.levigo.util.base.glazedlists
Class UniqueList<E>

java.lang.Object
  extended by com.levigo.util.base.glazedlists.AbstractEventList<E>
      extended by com.levigo.util.base.glazedlists.TransformedList<E,E>
          extended by com.levigo.util.base.glazedlists.UniqueList<E>
All Implemented Interfaces:
ListEventListener<E>, EventList<E>, Iterable<E>, Collection<E>, EventListener, List<E>

public final class UniqueList<E>
extends TransformedList<E,E>

An EventList that shows the unique elements from its source EventList. For example, the source list {A, A, B, C, C, C, D} would be simplified to {A, B, C, D} by this UniqueList.

Warning: This class breaks the contract required by List. See EventList for an example.

Warning: This class is thread ready but not thread safe. See EventList for an example of thread safe code.

EventList Overview
Writable:yes
Concurrency:thread ready, not thread safe
Performance:
Memory:N/A
Unit Tests:N/A
Issues: 27 34 35 45 46 55 58 114

Author:
Kevin Maltby, James Lemieux, Jesse Wilson

Field Summary
 
Fields inherited from class com.levigo.util.base.glazedlists.TransformedList
source
 
Fields inherited from class com.levigo.util.base.glazedlists.AbstractEventList
publisher, readWriteLock, updates
 
Constructor Summary
UniqueList(EventList<E> source)
          Creates a UniqueList that determines uniqueness via the Comparable interface.
UniqueList(EventList<E> source, Comparator<? super E> comparator)
          Creates a UniqueList that determines uniqueness using the specified Comparator.
 
Method Summary
static
<E extends Comparable<? super E>>
UniqueList<E>
create(EventList<E> source)
          Creates a UniqueList that determines uniqueness via the Comparable interface.
 void dispose()
          Releases the resources consumed by this TransformedList so that it may eventually be garbage collected.
 List<E> getAll(E value)
          Returns a List of all original elements represented by the given value within this UniqueList.
 List<E> getAll(int index)
          Returns a List of all original elements represented by the value at the given index within this UniqueList.
 int getCount(E value)
          Returns the number of duplicates of the specified value.
 int getCount(int index)
          Returns the number of duplicates of the value found at the specified index.
protected  int getSourceIndex(int index)
          Gets the index in the source EventList that corresponds to the specified index.
 int indexOf(Object element)
          Returns the index in this list of the first occurrence of the specified element, or -1 if this list does not contain this element.
protected  boolean isWritable()
          Gets whether the source EventList is writable via this API.
 void listChanged(ListEvent<E> listChanges)
          When the underlying list changes, this notification allows the object to repaint itself or update itself as necessary.
 E remove(int index)
          Removes the element at the specified position in this list (optional operation).
 E set(int index, E value)
          Replaces the element at the specified position in this list with the specified element (optional operation).
 void setComparator(Comparator<? super E> comparator)
          Change the Comparator which determines the unique elements of this List.
 int size()
          Returns the number of elements in this list.
 
Methods inherited from class com.levigo.util.base.glazedlists.TransformedList
add, addAll, clear, get, removeAll, retainAll
 
Methods inherited from class com.levigo.util.base.glazedlists.AbstractEventList
add, addAll, addListEventListener, contains, containsAll, equals, getPublisher, getReadWriteLock, hashCode, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, removeListEventListener, subList, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

UniqueList

public UniqueList(EventList<E> source)
Creates a UniqueList that determines uniqueness via the Comparable interface. All elements of the source EventList must implement Comparable.

Usage of factory method create(EventList) is preferable.

Parameters:
source - the EventList containing duplicates to remove

UniqueList

public UniqueList(EventList<E> source,
                  Comparator<? super E> comparator)
Creates a UniqueList that determines uniqueness using the specified Comparator.

Parameters:
source - the EventList containing duplicates to remove
comparator - the Comparator used to determine equality
Method Detail

create

public static <E extends Comparable<? super E>> UniqueList<E> create(EventList<E> source)
Creates a UniqueList that determines uniqueness via the Comparable interface. All elements of the source EventList must implement Comparable.

Parameters:
source - the EventList containing duplicates to remove

setComparator

public void setComparator(Comparator<? super E> comparator)
Change the Comparator which determines the unique elements of this List.

Parameters:
comparator - the Comparator used to determine groupings; null will be treated as GlazedLists.comparableComparator()

size

public int size()
Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

Specified by:
size in interface Collection<E>
Specified by:
size in interface List<E>
Overrides:
size in class TransformedList<E,E>
Returns:
the number of elements in this list.

getSourceIndex

protected int getSourceIndex(int index)
Gets the index in the source EventList that corresponds to the specified index. More formally, returns the index such that
this.get(i) == source.get(getSourceIndex(i)) for all legal values of i.

Overrides:
getSourceIndex in class TransformedList<E,E>

remove

public E remove(int index)
Removes the element at the specified position in this list (optional operation). Shifts any subsequent elements to the left (subtracts one from their indices). Returns the element that was removed from the list.

Specified by:
remove in interface List<E>
Overrides:
remove in class TransformedList<E,E>
Parameters:
index - the index of the element to removed.
Returns:
the element previously at the specified position.

set

public E set(int index,
             E value)
Replaces the element at the specified position in this list with the specified element (optional operation).

Specified by:
set in interface List<E>
Overrides:
set in class TransformedList<E,E>
Parameters:
index - index of element to replace.
value - element to be stored at the specified position.
Returns:
the element previously at the specified position.

indexOf

public int indexOf(Object element)
Returns the index in this list of the first occurrence of the specified element, or -1 if this list does not contain this element. More formally, returns the lowest index i such that uniqueListComparator.compare(get(i), element) == 0, or -1 if there is no such index.

Note: This is a departure from the contract for List.indexOf(java.lang.Object) since it does not guarantee that element.equals(get(i)) where i is a positive index returned from this method.

Specified by:
indexOf in interface List<E>
Overrides:
indexOf in class AbstractEventList<E>
Parameters:
element - the element to search for.
Returns:
the index in this list of the first occurrence of the specified element, or -1 if this list does not contain this element
Throws:
ClassCastException - if the type of the specified element is incompatible with this list

isWritable

protected boolean isWritable()
Gets whether the source EventList is writable via this API.

Extending classes must override this method in order to make themselves writable.

Specified by:
isWritable in class TransformedList<E,E>

listChanged

public void listChanged(ListEvent<E> listChanges)
When the underlying list changes, this notification allows the object to repaint itself or update itself as necessary.

It is mandatory that the calling thread has obtained the write lock on the source list. This is because the calling thread will have written to the source list to cause this event. This condition guarantees that no writes can occur while the listener is handling this event. It is an error to write to the source list while processing an event.

Specified by:
listChanged in interface ListEventListener<E>
Specified by:
listChanged in class TransformedList<E,E>

getCount

public int getCount(int index)
Returns the number of duplicates of the value found at the specified index.


getCount

public int getCount(E value)
Returns the number of duplicates of the specified value.


getAll

public List<E> getAll(int index)
Returns a List of all original elements represented by the value at the given index within this UniqueList.


getAll

public List<E> getAll(E value)
Returns a List of all original elements represented by the given value within this UniqueList.


dispose

public void dispose()
Releases the resources consumed by this TransformedList so that it may eventually be garbage collected.

A TransformedList will be garbage collected without a call to TransformedList.dispose(), but not before its source EventList is garbage collected. By calling TransformedList.dispose(), you allow the TransformedList to be garbage collected before its source EventList. This is necessary for situations where a TransformedList is short-lived but its source EventList is long-lived.

Warning: It is an error to call any method on a TransformedList after it has been disposed.

Specified by:
dispose in interface EventList<E>
Overrides:
dispose in class TransformedList<E,E>


Copyright © 1995-2020 levigo holding gmbh. All Rights Reserved.