Всем привет, прошу помощи.
Задача сгруппировать пользователей по кол-ву очков:
Т.е
ArrayList list = new ArrayList<>();
list.add(new User("Иванов",2));
list.add(new User("Петров",2));
list.add(new User("Сидоров",5));
list.add(new User("Павлов",5));
list.add(new User("Ромашкин",1));
На выходе нужен вот такой HashMap:
score: 2 {Иванов,Петров}
score: 5 {Сидоров,Павлов}
score: 1 {Ромашкин}
Проблема у меня в том, что в HashSet bucket записывается только один пользователь.
Вот мой код:
//Изначальный список пользователей
ArrayList<User> list = new ArrayList<>();
list.add(new User("Иванов",2));
list.add(new User("Петров",2));
list.add(new User("Сидоров",5));
list.add(new User("Павлов",5));
list.add(new User("Ромашкин",1));
//Конечный результат
HashMap<Integer,HashSet<User>> resultMap = new HashMap<>();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
User item = (User) iterator.next();
//корзина для пользователей с одинаковым кол-вом очков
HashSet<User> bucket = new HashSet<>();
for(int i=0;i<list.size();i++){
User subItem = list.get(i);
if(item.getLeadQualificated() == subItem.getLeadQualificated()){
if(bucket.add(item)){
System.out.println("Добавил в корзину : "+item.getLeadQualificated()+"-> "+item.getManager());
}
}
}
resultMap.put(item.getLeadQualificated(),bucket);//(key-очки, value - список пользователей с таким кол-вом очков)
}
//Выводим resultMap
Iterator it = resultMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
int key = (int) entry.getKey();
System.out.println("Score: "+key);
HashSet<User> buketUsers = (HashSet<User>) entry.getValue();
Iterator<User> it2 = buketUsers.iterator();
while(it2.hasNext()){
User user = it2.next();
System.out.println(user.getManager());
}
System.out.println("...");
}
В консоле:
Добавил в корзину : 5-> Сидоров
Добавил в корзину : 5-> Павлов
Добавил в корзину : 2-> Иванов
Добавил в корзину : 2-> Петров
Добавил в корзину : 1-> Ромашкин
_______________________________
Score: 1
Ромашкин
...
Score: 2
Петров
...
Score: 5
Павлов
...