Je veux afficher les valeurs dans un Donc, je devrais déterminer si la carte hashmap code>. Un
hashmap code> peut avoir des valeurs en double (mais pas les touches en double), mais je souhaite afficher une valeur une seule fois. p>
code> a des valeurs dupliquées. Je sais que nous pouvons iTerrer sur la carte
code> et utiliser le retour Boolean de
Map.ContainsValue (valeur) code>. Je veux savoir si une méthode existe pour trouver des valeurs en double sur la carte ou devrions-je écrire le code moi-même? p>
7 Réponses :
Une solution simple serait de comparer la taille de votre liste de valeurs avec votre jeu de valeurs.
// pseudo-code List<T> valuesList = map.values(); Set<T> valuesSet = new HashSet<T>(map.values); // check size of both collections; if unequal, you have duplicates
Cette technologie va bien. Mais si je veux supprimer la moyenne des doublons devrait faire le bon fonctionnement manuel?
Oui, vous devrez faire une opération manuelle. Mais si vous pouvez m'expliquer le scénario exactement i>, comme dans la façon dont vous vous retrouvez avec plusieurs clés ayant la même valeur et pourquoi vous souhaitez les supprimer, peut-être que je peux proposer une meilleure solution.
Il n'y a pas de telle méthode fournie à partir de JDK1.6. p>
Un moyen simple que vous pouvez faire est p>
Exemple: sortie: p>
Comment puis-je ajouter cela dans la même carte
Vous pouvez demander cela comme une nouvelle question. N'oubliez pas de décrire clairement ce que vous essayez d'atteindre, montrer le code que vous avez essayé jusqu'à présent et ce qui ne va pas exactement
Utilisez la méthode de la classe de la bibliothèque Apache Commons
org.apache.commons.collections.MapUtils.invertMap(map)
Essayez ce code
private boolean hasDuplicates(Map<Integer, List<String>> datamap){ boolean status = false; Set valueset=new HashSet(datamap.values()); if(datamap.values().size()!=valueset.size()){ status=true; } else{ status = false; } return status; }
try this code but this is not optimize code : public class HashMapDulicate { public static void main(String[] args) { Map<String,Integer> map=new HashMap<>(); map.put("A", 1); map.put("B", 1); map.put("C", 3); map.put("D", 4); Set set=new HashSet<>(); List list=new ArrayList<>(); for(Entry<String, Integer> mapVal:map.entrySet()) { if(!set.add(mapVal.getValue())) { list.add(mapVal.getValue()); }else { set.add(mapVal.getValue()); } } for(Entry<String, Integer> mapVal:map.entrySet()) { if(list.contains(mapVal.getValue())){ System.out.println(mapVal.getKey() +":" + mapVal.getValue()); } } } }
public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); map.put("abc", 2); map.put("def", 1); map.put("hij", 4); map.put("klm", 6); map.put("nop", 2); map.put("qrs", 2); map.put("tuv", 6); map.put("wxy", 8); map.put("zab", 1); map.put("cde", 5); map.put("fgh", 4); map.put("ijk", 3); HashMap<Integer, String> duplicatMap = new HashMap<>(); Set<Entry<String, Integer>> entrySet = map.entrySet(); Iterator<Entry<String, Integer>> iterator = entrySet.iterator(); while(iterator.hasNext()) { Entry<String, Integer> entry = iterator.next(); String key = entry.getKey(); Integer value = entry.getValue(); if(duplicatMap.containsKey(value)) { duplicatMap.put(value, duplicatMap.get(value)+", "+key); } else { duplicatMap.put(value, key); } } System.out.println(duplicatMap); } outPut: - {1=def, zab, 2=abc, qrs, nop, 3=ijk, 4=fgh, hij, 5=cde, 6=tuv, klm, 8=wxy} if you want to modify then use again EntrySet.