Ordenar una vista de reciclaje

Hola chicos, ¿cómo podría ordenar una vista de reciclador por los datos que están dentro de una vista de texto determinada que está dentro de cada elemento dentro de la vista de reciclaje. También me gustaría saber cómo agregar un encabezado a cada elemento que sea diferente en los datos. es decir.

Estoy ordenando tratando de ordenar por fecha y quiero que todas las fechas de xyz se agrupen bajo un encabezado y las fechas de 123 se agrupen bajo otro generador. ¿Es esto posible gracias.

Publicaré mi adaptador por ahora si necesita otra información, solo comente debajo de esto. Salud.

Aquí está el código que se indica en el fragmento en el que se encuentra la vista del reciclador.

 mAdapter = new RecyclerViewAdapterTransactions(getActivity(), account, amount, incomeExpense, type, date, category, uid, description);
             ((RecyclerViewAdapterTransactions) mAdapter).setMode(Attributes.Mode.Single);
             recyclerView.setHasFixedSize(true);
             recyclerView.setAdapter(mAdapter);

Adaptador RecyclerViewAdapterTransactions:

    public class RecyclerViewAdapterTransactions extends RecyclerSwipeAdapter<RecyclerViewAdapterTransactions.SimpleViewHolder>{

   public static class SimpleViewHolder extends RecyclerView.ViewHolder {

      SwipeLayout swipeLayout;
      ImageButton buttonDelete;
      ImageButton buttonEdit;

      TextView textViewAccount;
      TextView textViewAmount;
      TextView textViewIncomeExpense;
      TextView textViewDate;
      TextView textViewUID;
      TextView textViewCategory;
      TextView textViewDescription;
      TextView textViewType;

      public SimpleViewHolder(View itemView) {
         super(itemView);
         swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipeLayoutTransactions);
         buttonDelete = (ImageButton) itemView.findViewById(R.id.imageButtonTransactionDelete);
         buttonEdit = (ImageButton) itemView.findViewById(R.id.imageButtonTransactionEdit);

         textViewAmount = (TextView) itemView.findViewById(R.id.textViewAmount);
         textViewAccount = (TextView) itemView.findViewById(R.id.textViewAccount);
         textViewIncomeExpense = (TextView) itemView.findViewById(R.id.textViewIncomeExpense);
         textViewType = (TextView) itemView.findViewById(textViewTransactionType);
         textViewDate = (TextView) itemView.findViewById(R.id.textViewDateOfTransaction);
         textViewCategory = (TextView) itemView.findViewById(R.id.textViewCategory);
         textViewUID = (TextView) itemView.findViewById(R.id.id);
         textViewDescription = (TextView) itemView.findViewById(R.id.textViewDescription);


      }
   }

   private Context mContext;
   private ArrayList<String> account;
   private ArrayList<String> amount;
   private ArrayList<String> incomeExpense;
   private ArrayList<String> type;
   private ArrayList<String> date;
   private ArrayList<String> category;
   private ArrayList<String> uid;
   private ArrayList<String> description;


   public RecyclerViewAdapterTransactions(Context context, ArrayList<String> account, ArrayList<String> amount, ArrayList<String> incomeExpense, ArrayList<String> type, ArrayList<String> date, ArrayList<String> category, ArrayList<String> uid, ArrayList<String> description) {
      this.mContext = context;
      this.account = account;
      this.amount = amount;
      this.incomeExpense = incomeExpense;
      this.type = type;
      this.date = date;
      this.category = category;
      this.uid = uid;
      this.description = description;
   }



   @Override
   public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_transactions, parent, false);
      return new SimpleViewHolder(view);
   }


   @Override
   public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) {

      String itemAccount = account.get(position);
      String itemAmount = amount.get(position);
      String itemIncomeExpense = incomeExpense.get(position);
      String itemType = type.get(position);
      String itemDate = date.get(position);
      String itemCategory = category.get(position);
      String itemDescription = description.get(position);
      final String itemID = uid.get(position);

      viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);

      viewHolder.buttonDelete.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
            mItemManger.removeShownLayouts(viewHolder.swipeLayout);
            account.remove(position);
            amount.remove(position);
            incomeExpense.remove(position);
            type.remove(position);
            date.remove(position);
            category.remove(position);
            uid.remove(position);
            description.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, account.size());
            mItemManger.closeAllItems();

            TransactionsDatabase transactionsDatabase = new TransactionsDatabase(mContext);
            transactionsDatabase.open();
            transactionsDatabase.deleteEntry(itemID);
            transactionsDatabase.close();

         }
      });

      viewHolder.buttonEdit.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {

            Intent intent = new Intent();
            intent.setClass(mContext, EditTransaction.class);

            intent.putExtra("account", account.get(position));//
            intent.putExtra("amount", amount.get(position));//
            intent.putExtra("incomeExpense", incomeExpense.get(position));//
            intent.putExtra("type", type.get(position));//
            intent.putExtra("date", date.get(position));//
            intent.putExtra("category", category.get(position));//
            intent.putExtra("uid", uid.get(position));
            intent.putExtra("description", description.get(position));//
            mContext.startActivity(intent);


         }
      });


      Typeface robotoTypeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto-Thin.ttf");
      viewHolder.textViewAccount.setText(itemAccount);
      viewHolder.textViewAmount.setText(itemAmount);
      viewHolder.textViewIncomeExpense.setText(itemIncomeExpense);
      viewHolder.textViewType.setText(itemType);
      viewHolder.textViewDate.setText(itemDate);
      viewHolder.textViewCategory.setText(itemCategory);
      viewHolder.textViewUID.setText(itemID);
      viewHolder.textViewDescription.setText(itemDescription);

      viewHolder.textViewAccount.setTypeface(robotoTypeFace);
      viewHolder.textViewAmount.setTypeface(robotoTypeFace);
      viewHolder.textViewIncomeExpense.setTypeface(robotoTypeFace);
      viewHolder.textViewType.setTypeface(robotoTypeFace);
      viewHolder.textViewDate.setTypeface(robotoTypeFace);
      viewHolder.textViewCategory.setTypeface(robotoTypeFace);
      viewHolder.textViewUID.setTypeface(robotoTypeFace);
      viewHolder.textViewDescription.setTypeface(robotoTypeFace);

      mItemManger.bindView(viewHolder.itemView, position);
   }

   @Override
   public int getItemCount() {
      return uid.size();
   }

   @Override
   public int getSwipeLayoutResourceId(int position) {
      return R.id.swipeLayoutTransactions;
   }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta