Class RelationBackedList

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<nz.org.riskscape.engine.Tuple>
nz.org.riskscape.engine.util.RelationBackedList
All Implemented Interfaces:
Iterable<nz.org.riskscape.engine.Tuple>, Collection<nz.org.riskscape.engine.Tuple>, List<nz.org.riskscape.engine.Tuple>

public class RelationBackedList extends AbstractList<nz.org.riskscape.engine.Tuple>

Allows a Relation to be treated like a List in a pipeline. Mostly this is to allow relation data to be dynamically loaded from multiple different sources, i.e. read a CSV file that points to other CSV files. Typically in a pipeline, this will look something like: select({*, to_list(bookmark(foo)) as relation_backed_list }) -> unnest(relation_backed_list)

Warning: some basic list operations can be slow for a RelationBackedList, especially if the relation is large. Some basic list operations are unsupported (i.e. modifying the list), although lists typically aren't modified in a pipeline (instead, a new list is created).

  • Constructor Details

    • RelationBackedList

      public RelationBackedList(nz.org.riskscape.engine.relation.Relation relation, nz.org.riskscape.problem.ProblemSink sink)
  • Method Details

    • iterator

      public Iterator<nz.org.riskscape.engine.Tuple> iterator()
      Specified by:
      iterator in interface Collection<nz.org.riskscape.engine.Tuple>
      Specified by:
      iterator in interface Iterable<nz.org.riskscape.engine.Tuple>
      Specified by:
      iterator in interface List<nz.org.riskscape.engine.Tuple>
      Overrides:
      iterator in class AbstractList<nz.org.riskscape.engine.Tuple>
    • get

      public nz.org.riskscape.engine.Tuple get(int index)

      Warning: accessing a specific item in RelationBackedList can be slow, as it requires iterating through all the tuples in the relation up to the specific index.

      Specified by:
      get in interface List<nz.org.riskscape.engine.Tuple>
      Specified by:
      get in class AbstractList<nz.org.riskscape.engine.Tuple>
    • size

      public int size()

      Note that size() only includes the valid tuples in the relation. Warning: getting the size of a RelationBackedList can be slow, as it requires iterating through all the tuples in the relation in order to work out the exact size.

      Specified by:
      size in interface Collection<nz.org.riskscape.engine.Tuple>
      Specified by:
      size in interface List<nz.org.riskscape.engine.Tuple>
      Specified by:
      size in class AbstractCollection<nz.org.riskscape.engine.Tuple>
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface Collection<nz.org.riskscape.engine.Tuple>
      Specified by:
      isEmpty in interface List<nz.org.riskscape.engine.Tuple>
      Overrides:
      isEmpty in class AbstractCollection<nz.org.riskscape.engine.Tuple>
    • add

      public void add(int index, nz.org.riskscape.engine.Tuple element)
      Specified by:
      add in interface List<nz.org.riskscape.engine.Tuple>
      Overrides:
      add in class AbstractList<nz.org.riskscape.engine.Tuple>
    • add

      public boolean add(nz.org.riskscape.engine.Tuple element)
      Specified by:
      add in interface Collection<nz.org.riskscape.engine.Tuple>
      Specified by:
      add in interface List<nz.org.riskscape.engine.Tuple>
      Overrides:
      add in class AbstractList<nz.org.riskscape.engine.Tuple>
    • addAll

      public boolean addAll(Collection<? extends nz.org.riskscape.engine.Tuple> c)
      Specified by:
      addAll in interface Collection<nz.org.riskscape.engine.Tuple>
      Specified by:
      addAll in interface List<nz.org.riskscape.engine.Tuple>
      Overrides:
      addAll in class AbstractCollection<nz.org.riskscape.engine.Tuple>
    • sort

      public void sort(Comparator<? super nz.org.riskscape.engine.Tuple> c)