Сравните значения HashMap в ArrayList - PullRequest
1 голос
/ 27 октября 2011

У меня есть ArrayList и в этом есть HashMap<String, String>.Итак, я хочу сравнить для тех же значений на картах.Когда я нахожу одинаковые значения, я хочу сохранить одну карту из них.Например, предположим, что вторая карта и пятая карта (в массиве) имеют одинаковое значение.Я хочу сохранить вторую карту и удалить пятую из массива.я пытаюсь сделать с итератором, но я не могу это сделать.Это кажется сложным.Можете привести пример?

Это моя последняя попытка:

private HashMap<String, String> mapValues = new HashMap<String, String>();
private HashMap<String, String> mapValues2 = new HashMap<String,String>(); 
private HashMap<Integer, String> mval = new HashMap<Integer, String>();

//i take the ArrayList with the maps for comparison private
ArrayList<HashMap<String, String>> check(ArrayList<HashMap<String, String>> list) {           

 //a new ArrayList. It will have the maps(HashMap<key, value>) with no same values.
 ArrayList<HashMap<String, String>> listFinal = new ArrayList<HashMap<String, String();

    for (int i = 0; i < list.size(); i++) {
        mapValues = list.get(i);
        mval.put(i, mapValues.get("value"));
    }

    for (int i = 0; i < mval.size(); i++) {
        HashMap<String, String> newMapValues = new HashMap<String, String>();
        mapValues2 = list.get(i);
        String iVal = mapValues2.get("value");
        newMapValues = list.get(i);
        int flag = -1;
        int remove = -1;

        for (int j = i+1; j < mval.size()-1; j++) {
            String jVal = mval.get(j);
            if (val.compareTo(jVal) == 0) {
                flag = i;
                remove = j;
            }
        }
        if (flag == -1) {
            listFinal.add(newMapValues );
        } else if (flag != -1) {
            listFinal.remove(remove);
        }   
    }
}

Ответы [ 5 ]

1 голос
/ 27 октября 2011

Просто мысли вслух, но мой подход был бы примерно таким:

Создайте набор, в котором вы сохраните значения, которые вы уже нашли на карте.

Каждый раз, когда вы получаете карту в новой позиции списка, проверьте, существует ли элемент карты в наборе, если он есть, удалите карту из ArrayList (она дублируется), если нет, добавьте значение карты в поле Set and Carry on.

Убедитесь, что вы удалили Map из ArrayList, используя метод удаления Итератора!

1 голос
/ 27 октября 2011
List<Map<String, String>> mapList = new ArrayList<Map<String, String>>(); //Assuming string-string pairs for simplicity...
//... filling up list and maps...
Set<String> valueSet = new HashSet<String>();
for(Iterator<Map<String, String> mapIt = mapList.iterator(); mapIt.hasNext();) {
    final Map<String, String> map = mapIt.next();
    boolean hasDuplicate = false;
    for(final String mapValue : map.values()) {
        if(valueSet.contains(mapValue)
            hasDuplicate = true;
    }
    if(hasDuplicate)
        mapIt.remove();
    valueSet.addAll(map.values());
}

Надеюсь, кто-то вычитает это, потому что я не набираю его в IDE, и у меня еще не было кофе.

РЕДАКТИРОВАТЬ: хорошо, предыдущая версия была чертовски неправильной.Проверьте это вместо этого.

РЕДАКТИРОВАТЬ 2: только что понял, что это не будет работать.Например, он может удалить карту 3, поскольку он имеет значение дублирования с картой 2, но карта 2 удалена из-за некоторого другого значения дублирования с картой 1. Результат: сохраняется только карта 1, а карты 2 и 3 удаляются, но карта 3не имеет дубликатов с картой 1. Это немного сложнее, чем я думал.Лучше возьми кофе ...

0 голосов
/ 06 сентября 2015
package com.test.examples;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.test.vo.CustomerContactVO;
import com.test.vo.CustomerOutPut;
import com.test.vo.CustomerPreferenceVO;

public class TestExampleOne {

    public static Map<String, CustomerContactVO> getVO(){

        Map<String, CustomerContactVO> contactVOMap = new HashMap<String, CustomerContactVO>();
        CustomerContactVO v = new CustomerContactVO();
        v.setContactAcctID("60011151");
        v.setEmailID("raj@gmail.com");

        CustomerContactVO v1 = new CustomerContactVO();
        v1.setContactAcctID("60011152");
        v1.setEmailID("raj1@gmail.com");

        CustomerContactVO v2 = new CustomerContactVO();
        v2.setContactAcctID("60011153");
        v2.setEmailID("raj2@gmail.com");

        CustomerContactVO v3 = new CustomerContactVO();
        v3.setContactAcctID("60011154");
        v3.setEmailID("raj3@gmail.com");

        CustomerContactVO v4 = new CustomerContactVO();
        v4.setContactAcctID("60011155");
        v4.setEmailID("raj4@gmail.com");

        contactVOMap.put("60011151", v);
        contactVOMap.put("60011152", v1);
        contactVOMap.put("60011153", v2);
        contactVOMap.put("60011154", v3);
        contactVOMap.put("60011155", v4);

        return contactVOMap;
    }

    public static List<CustomerPreferenceVO> perfVo(){
        CustomerPreferenceVO prefVo = new CustomerPreferenceVO();
        prefVo.setContactAcctID("60011151");
        prefVo.setMktInd("500");
        prefVo.setPrefInd("Y");


        CustomerPreferenceVO prefVo1 = new CustomerPreferenceVO();
        prefVo1.setContactAcctID("60011153");
        prefVo1.setMktInd("302");
        prefVo1.setPrefInd("N");

        CustomerPreferenceVO prefVo2 = new CustomerPreferenceVO();
        prefVo2.setContactAcctID("60011154");
        prefVo2.setMktInd("302");
        prefVo2.setPrefInd("Y");

        List<CustomerPreferenceVO> list = new ArrayList<CustomerPreferenceVO>();
        list.add(prefVo);
        list.add(prefVo1);
        list.add(prefVo2);

        return list;
    }

    public static void main(String[] args) {

        Iterator<Entry<String, CustomerContactVO>> it = getVO().entrySet().iterator();
        List<CustomerOutPut> customerOutPutsList = new ArrayList<CustomerOutPut>();

        while(it.hasNext()){

            Entry<String, CustomerContactVO> ent = it.next();
            String contAcctIDKey = ent.getKey();
            String email = ent.getValue().getEmailID();
            CustomerOutPut customerOutPut = new CustomerOutPut();
            customerOutPut.setContactAcctIDVo(contAcctIDKey);
            customerOutPut.setEmailIDVo(email);

            for (CustomerPreferenceVO customerPreferenceVO : perfVo()) {

                if(customerPreferenceVO.getContactAcctID()!=null && 
                        customerPreferenceVO.getContactAcctID().equals(contAcctIDKey)){

                    customerOutPut.setContactAcctIDRef(customerPreferenceVO.getContactAcctID());
                    customerOutPut.setMktIndRef(customerPreferenceVO.getMktInd());
                    customerOutPut.setPrefIndRef(customerPreferenceVO.getPrefInd());

                }
            }

            customerOutPutsList.add(customerOutPut);
        }

        for (CustomerOutPut customerOutPut : customerOutPutsList) {
            System.out.println(customerOutPut.toString());
        }
    }

}
0 голосов
/ 06 сентября 2015

Сравнить Map ключи с Arraylist значениями

public static void main(String[] args) {

        Iterator<Entry<String, CustomerContactVO>> it = getVO().entrySet().iterator();

        List<CustomerOutPut> customerOutPutsList = new ArrayList<CustomerOutPut>();

        while(it.hasNext()){
            Entry<String, CustomerContactVO> ent = it.next();
            String contAcctIDKey = ent.getKey();
            String email = ent.getValue().getEmailID();
            CustomerOutPut customerOutPut = new CustomerOutPut();
            customerOutPut.setContactAcctIDVo(contAcctIDKey);
            customerOutPut.setEmailIDVo(email);

            for (CustomerPreferenceVO customerPreferenceVO : perfVo()) {
                if(customerPreferenceVO.getContactAcctID()!=null && customerPreferenceVO.getContactAcctID().equals(contAcctIDKey)){
                    customerOutPut.setContactAcctIDRef(customerPreferenceVO.getContactAcctID());
                    customerOutPut.setMktIndRef(customerPreferenceVO.getMktInd());
                    customerOutPut.setPrefIndRef(customerPreferenceVO.getPrefInd());
                }
            }

            customerOutPutsList.add(customerOutPut);
        }

        for (CustomerOutPut customerOutPut : customerOutPutsList) {
            System.out.println(customerOutPut.toString());
        }
    }
0 голосов
/ 27 октября 2011

Создайте Set<HashMap<String,String>> и добавьте к нему каждого члена list.Задача решена!

Если вам абсолютно необходимо ArrayList вместо Set, вы можете создать новый ArrayList из Set, но в любом случае урок: пусть Java сделает всю работу за вас.Вы вряд ли справитесь с манипуляциями с коллекциями лучше, чем стандартная библиотека.

...