Package org.apache.lucene.misc.util.fst

# Class ListOfOutputs<T>

java.lang.Object
org.apache.lucene.util.fst.Outputs<Object>
org.apache.lucene.misc.util.fst.ListOfOutputs<T>

public final class ListOfOutputs<T> extends Outputs<Object>
Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling `FSTCompiler.add(IntsRef,Object)` multiple times. The builder will then combine the outputs using the `Outputs.merge(Object,Object)` method.

The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state.

NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to `FSTCompiler.add(org.apache.lucene.util.IntsRef, T)`). If your outputs are longs, and you need at most 2, then use `UpToTwoPositiveIntOutputs` instead since it stores the outputs more compactly (by stealing a bit from each long value).

NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this).

WARNING: This API is experimental and might change in incompatible ways in the next release.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ListOfOutputs(Outputs<T> outputs)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `add(Object prefix, Object output)`
  `List<T>`
  `asList(Object output)`
  `Object`
  `common(Object output1, Object output2)`
  `Object`
  `getNoOutput()`
  `Object`
  `merge(Object first, Object second)`
  `String`
  `outputToString(Object output)`
  `long`
  `ramBytesUsed(Object output)`
  `Object`
  `read(DataInput in)`
  `Object`
  `readFinalOutput(DataInput in)`
  `void`
  `skipFinalOutput(DataInput in)`
  `void`
  `skipOutput(DataInput in)`
  `Object`
  `subtract(Object object, Object inc)`
  `String`
  `toString()`
  `void`
  `write(Object output, DataOutput out)`
  `void`
  `writeFinalOutput(Object output, DataOutput out)`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### ListOfOutputs

    public ListOfOutputs(Outputs<T> outputs)

- ## Method Details

  - ### common

    public Object common(Object output1, Object output2)
    Specified by:
      `common` in class `Outputs<Object>`

  - ### subtract

    public Object subtract(Object object, Object inc)
    Specified by:
      `subtract` in class `Outputs<Object>`

  - ### add

    public Object add(Object prefix, Object output)
    Specified by:
      `add` in class `Outputs<Object>`

  - ### write

    public void write(Object output, DataOutput out) throws IOException
    Specified by:
      `write` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### writeFinalOutput

    public void writeFinalOutput(Object output, DataOutput out) throws IOException
    Overrides:
      `writeFinalOutput` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### read

    public Object read(DataInput in) throws IOException
    Specified by:
      `read` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### skipOutput

    public void skipOutput(DataInput in) throws IOException
    Overrides:
      `skipOutput` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### readFinalOutput

    public Object readFinalOutput(DataInput in) throws IOException
    Overrides:
      `readFinalOutput` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### skipFinalOutput

    public void skipFinalOutput(DataInput in) throws IOException
    Overrides:
      `skipFinalOutput` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### getNoOutput

    public Object getNoOutput()
    Specified by:
      `getNoOutput` in class `Outputs<Object>`

  - ### outputToString

    public String outputToString(Object output)
    Specified by:
      `outputToString` in class `Outputs<Object>`

  - ### merge

    public Object merge(Object first, Object second)
    Overrides:
      `merge` in class `Outputs<Object>`

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### asList

    public List<T> asList(Object output)

  - ### ramBytesUsed

    public long ramBytesUsed(Object output)
    Specified by:
      `ramBytesUsed` in class `Outputs<Object>`