Class RearrangedRowsAndColumns

  • All Implemented Interfaces:
    RowsAndColumns

    public class RearrangedRowsAndColumns
    extends Object
    implements RowsAndColumns
    This class exists to "decorate" a rows and columns such that it pretends to exist in a new ordering.

    The constructor generally takes an int[] of pointers, these pointers are used to re-map the rows from the RowsAndColumns object. That is, if the RowsAndColumns has 4 rows and the array new int[]{3, 1, 2, 0} is passed in, then the order of traverals of the rows will be 3 -> 1 -> 2 -> 0.

    This can be useful for sorting potentially immutable data, as the list of pointers can identify the order that the rows should be traversed in. It can also be used for clustering like-data together.

    While this avoids a copy, in cases where the data will be iterated regularly, it also generates a random-access pattern that is not always optimal.

    • Constructor Detail

      • RearrangedRowsAndColumns

        public RearrangedRowsAndColumns​(int[] pointers,
                                        RowsAndColumns rac)
      • RearrangedRowsAndColumns

        public RearrangedRowsAndColumns​(int[] pointers,
                                        int start,
                                        int end,
                                        RowsAndColumns rac)
    • Method Detail

      • getColumnNames

        public Collection<String> getColumnNames()
        Description copied from interface: RowsAndColumns
        The set of column names available from the RowsAndColumns
        Specified by:
        getColumnNames in interface RowsAndColumns
        Returns:
        The set of column names available from the RowsAndColumns
      • numRows

        public int numRows()
        Description copied from interface: RowsAndColumns
        The number of rows in the RowsAndColumns object
        Specified by:
        numRows in interface RowsAndColumns
        Returns:
        the integer number of rows
      • findColumn

        @Nullable
        public Column findColumn​(String name)
        Description copied from interface: RowsAndColumns
        Finds a column by name. null is returned if the column is not found. The RowsAndColumns object should not attempt to default not-found columns to pretend as if they exist, instead the user of the RowsAndColumns object should decide the correct semantic interpretation of a column that does not exist. It is expected that most locations will choose to believe that the column does exist and is always null, but there are often optimizations that can effect this same assumption without doing a lot of extra work if the calling code knows that it does not exist.
        Specified by:
        findColumn in interface RowsAndColumns
        Parameters:
        name - the name of the column to find
        Returns:
        the Column, if found. null if not found.
      • as

        @Nullable
        public <T> T as​(Class<T> clazz)
        Description copied from interface: RowsAndColumns
        Asks the RowsAndColumns to return itself as a concrete implementation of a specific interface. The interface asked for will tend to be a semantically-meaningful interface. This method allows the calling code to interrogate the RowsAndColumns object about whether it can offer a meaningful optimization of the semantic interface. If a RowsAndColumns cannot do anything specifically optimal for the interface requested, it should return null instead of trying to come up with its own default implementation.
        Specified by:
        as in interface RowsAndColumns
        Type Parameters:
        T - The interface that the calling code wants a concrete implementation of
        Parameters:
        clazz - A class object representing the interface that the calling code wants a concrete implementation of
        Returns:
        A concrete implementation of the interface, or null if there is no meaningful optimization to be had through a local implementation of the interface.