docs: public List<Action> getUpdateActions(List<Long> itemIDs, int firstItemPos) {
          List<Long> oldIDs = new ArrayList<Long>();
          final int count = mAdapter.getCount();
          for(int index = 0; index < count; index++) {
              long id = mAdapter.getItemId(index);
              oldIDs.add(Long.valueOf(id));
          }
  
          LongSparseArray<Integer> newMap = new LongSparseArray<Integer>();
          listToMap(itemIDs, newMap, firstItemPos);
  
          LongSparseArray<Integer> oldMap = new LongSparseArray<Integer>();
  
          final List<Action> actions = new ArrayList<Action>();
  
          synchronized(mSyncObject) {
              if (oldIDs != null) {
                  listToMap(oldIDs, oldMap, 0);
  
                  for(int pos = oldIDs.size() - 1; pos >= firstItemPos; pos--) {
                      Long id = oldIDs.get(pos);
                      int newPos = newMap.get(id, -1);
                      if (newPos == -1) {
                          oldIDs.remove(pos);
                          oldMap.delete(id);
                          updateMap(oldIDs, oldMap, pos, -1);
                          actions.add(new Action(ACTION_TYPE.DELETE, id, pos, -1));
                      }
                  }
              }
  
              if (itemIDs != null) {
                  for(int index = 0; index < itemIDs.size(); index++) {
                      final int pos = firstItemPos + index;
                      final Long id  = itemIDs.get(index);
  
                      int oldPos = oldMap.get(id, -1);
                      if (oldPos != -1) {
                          if (oldPos != pos) {
                              oldIDs.remove(oldPos);
                              oldIDs.add(pos, id);
                              int min = Math.min(oldPos, pos);
                              int max = Math.max(oldPos, pos);
                              updateMap(oldIDs, oldMap, min, max + 1);
                              actions.add(new Action(ACTION_TYPE.MOVE, id, oldPos, pos));
                          }
                      } else {
                          if (oldIDs != null) {
                              oldIDs.add(pos, id);
                              updateMap(oldIDs, oldMap, pos, -1);
                          }
                          actions.add(new Action(ACTION_TYPE.ADD, id, -1, pos));
                      }
                  }
              }
          }
  
          return actions;
      }