code: private void init(List<Transliterator> list,
                        int direction,
                        boolean fixReverseID) {
          // assert(trans == 0);
  
          // Allocate array
          int count = list.size();
          trans = new Transliterator[count];
  
          // Move the transliterators from the vector into an array.
          // Reverse the order if necessary.
          int i;
          for (i=0; i<count; ++i) {
              int j = (direction == FORWARD) ? i : count - 1 - i;
              trans[i] = list.get(j);
          }
  
          // If the direction is UTRANS_REVERSE then we may need to fix the
          // ID.
          if (direction == REVERSE && fixReverseID) {
              StringBuilder newID = new StringBuilder();
              for (i=0; i<count; ++i) {
                  if (i > 0) {
                      newID.append(ID_DELIM);
                  }
                  newID.append(trans[i].getID());
              }
              setID(newID.toString());
          }
  
          computeMaximumContextLength();
      }
docs: Finish constructing a transliterator: only to be called by
  constructors.  Before calling init(), set trans and filter to NULL.
  @param list a vector of transliterator objects to be adopted.  It
  should NOT be empty.  The list should be in declared order.  That
  is, it should be in the FORWARD order; if direction is REVERSE then
  the list order will be reversed.
  @param direction either FORWARD or REVERSE
  @param fixReverseID if TRUE, then reconstruct the ID of reverse
  entries by calling getID() of component entries.  Some constructors
  do not require this because they apply a facade ID anyway.