private void fillSyncContactsList() { ArrayList<String> vkNames = getContactNames(vkFriends); boolean[] vkNamesUsed = new boolean[vkNames.size()]; Arrays.fill(vkNamesUsed, false); ArrayList<String> fbNames = getContactNames(fbFriends); boolean[] fbNamesUsed = new boolean[fbNames.size()]; Arrays.fill(fbNamesUsed, false); Queue<Pair<String, String>> phonebookNames = phonebook.getContactNames(); syncContacts.clear(); Handler mainHandler = new Handler(Looper.getMainLooper()); mainHandler.post( new Runnable() { @Override public void run() { listener.onTaskBegin(MAPPING_CAPTION, phonebook.getContactNames().size(), new int[] {}); } }); while (!phonebookNames.isEmpty()) { // Создаём новый SyncContact. SyncContact.java для подробностей SyncContact item = new SyncContact(); // получить текущее имя контакта с телефона Pair<String, String> pbItem = phonebookNames.remove(); String currentName = pbItem.first; String currentNumber = pbItem.second; // добавить его в se item.setPhonebookName(currentName); item.setPhonebookMobileNumber(currentNumber); int pos = findSimilarContact(currentName, vkNames); if (pos != -1) { item.setVkContact(vkFriends.get(pos)); vkNamesUsed[pos] = true; } else { item.setVkContact(null); } pos = findSimilarContact(currentName, fbNames); if (pos != -1) { item.setFbContact(fbFriends.get(pos)); fbNamesUsed[pos] = true; } else { item.setFbContact(null); } // добавить item в синхронизированный список контактов syncContacts.add(item); listener.onTaskProgress(syncContacts.size()); } mainHandler.post( new Runnable() { @Override public void run() { listener.onTaskCompleted(OK, new int[] {}); } }); for (int i = 0; i < vkNamesUsed.length; ++i) { if (!vkNamesUsed[i]) { SyncContact item = new SyncContact(); item.setPhonebookName(""); item.setVkContact(vkFriends.get(i)); item.setFbContact(null); syncContacts.add(item); } } for (int i = 0; i < fbNamesUsed.length; ++i) { if (!fbNamesUsed[i]) { SyncContact item = new SyncContact(); item.setPhonebookName(""); item.setVkContact(null); item.setFbContact(fbFriends.get(i)); syncContacts.add(item); } } }