package com.netease.nim.uikit.contact.core.model; import com.netease.nim.uikit.contact.core.item.AbsContactItem; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 通讯录列表数据(分组、索引) * Created by huangjun on 2015/2/10. */ public class ContactDataList extends AbsContactDataList { // // RESULT DATA // private List<Group> groups; private Map<String, Integer> indexes; public ContactDataList(ContactGroupStrategy groupStrategy) { super(groupStrategy); } @Override public int getCount() { int count = 0; for (Group group : groups) { count += group.getCount(); } return count; } @Override public AbsContactItem getItem(int index) { int count = 0; for (Group group : groups) { int gIndex = index - count; int gCount = group.getCount(); if (gIndex >= 0 && gIndex < gCount) { return group.getItem(gIndex); } count += gCount; } return null; } @Override public boolean isEmpty() { return groups.isEmpty() || indexes.isEmpty(); } @Override public List<AbsContactItem> getItems() { List<AbsContactItem> items = new ArrayList<AbsContactItem>(); for (Group group : groups) { AbsContactItem head = group.getHead(); if (head != null) { items.add(head); } items.addAll(group.getItems()); } return items; } @Override public Map<String, Integer> getIndexes() { return indexes; } @Override public void build() { // // GROUPS // List<Group> groups = new ArrayList<Group>(); groups.add(groupNull); groups.addAll(groupMap.values()); sortGroups(groups); // // INDEXES // Map<String, Integer> indexes = new HashMap<String, Integer>(); int count = 0; for (Group group : groups) { if (group.id != null) { indexes.put(group.id, count); } count += group.getCount(); } // // RESULT // this.groups = groups; this.indexes = indexes; } }