Моя программа очень простая. Все, что мне нужно сделать, это отслеживать дубликаты и печатать уникальные и повторяющиеся элементы отдельно. Я использую hashmap для этого. (dup - это arraylist, содержащий все элементы)
Map<Employee, Integer> newMap = new HashMap();
int count = 0;
for (Employee element : dup) {
System.out.println("oooo" + element);
if (newMap.put((Employee) element, count) != null) {
newMap.put((Employee) element, newMap.get(element) + 1);
}
}
System.out.println("oooo" + newMap);
Созданный o/p:
Employee No :9 Employee Name :Swasti Employee MailId :[email protected]=0, Employee No :2 Employee Name :Shanthi Employee MailId :[email protected]=0
Записи с дубликатами увеличиваются, а o/p:
Employee Name :Shreya Employee MailId :[email protected]=1, Employee Name :Sujatha Employee MailId :[email protected]=1
Проблема здесь в том, что счетчик не увеличивается больше, чем один для записей с большим количеством дубликатов. Я не понимаю, почему. Любая помощь по этому вопросу будет оценена по достоинству.
PS: Я пытался сделать это с помощью arraylist и hashset и получил результат, но использование карты казалось лучшим способом.
Это связано с тем, что эта строка:
if (newMap.put((Employee) element, count) != null) {
вы поставите 0 каждый раз (так как count
в коде всегда 0). И на следующей строке ваш newMap.get(element)
будет поэтому 0...
Вам нужно взять старое значение и проверить, что оно не равно null:
Integer oldValue = newMap.put((Employee) element, 0);
if (oldValue != null)
newMap.put((Employee) element, oldValue + 1);
Обратите внимание, что ваш dup
должен быть List<Employee>
, а не сырым List
. Это позволит избежать всех бросков, которые вы должны сделать в настоящее время.
if (newMap.get(element) != null) {
newMap.put(element, newMap.get(element) + 1);
} else {
newMap.put(element, 1);
}
if (newMap.containsKey(element)) {
newMap.put(element, newMap.get(element) + 1);
}
Кроме того, поскольку вы используете дженерики, вам нужно привести тип.