private List<QuranRow> getRowsSortedByTags(List<Tag> tags, List<Bookmark> bookmarks) { List<QuranRow> rows = new ArrayList<>(); // sort by tags, alphabetical Map<Long, List<Bookmark>> tagsMapping = generateTagsMapping(tags, bookmarks); for (int i = 0, tagsSize = tags.size(); i < tagsSize; i++) { Tag tag = tags.get(i); rows.add(QuranRowFactory.fromTag(tag)); List<Bookmark> tagBookmarks = tagsMapping.get(tag.id); for (int j = 0, tagBookmarksSize = tagBookmarks.size(); j < tagBookmarksSize; j++) { rows.add(QuranRowFactory.fromBookmark(mAppContext, tagBookmarks.get(j), tag.id)); } } // add untagged bookmarks List<Bookmark> untagged = tagsMapping.get(BOOKMARKS_WITHOUT_TAGS_ID); if (untagged.size() > 0) { rows.add(QuranRowFactory.fromNotTaggedHeader(mAppContext)); for (int i = 0, untaggedSize = untagged.size(); i < untaggedSize; i++) { rows.add(QuranRowFactory.fromBookmark(mAppContext, untagged.get(i))); } } return rows; }