Вы можете l oop по карте после того, как while-l oop вот так
проверить размер списка 3, 2 или 1
На основе вашего почтового запроса Есть 3, 2 и 1 строки, и я хочу
статус от 1 до 3, когда строки 3 статуса от 2 до 3, когда строки 2 статуса 1, когда 1 строка
на основе этого Я пишу условие для проверки:
список размеров: 3 -> (3-3) +1 = 2
список размеров: 2 -> (3-2) +1 = 2
список размера: 1 -> (3-1) +1 = 3
AtomicInteger
Поскольку я l oop над Dashboard list
с использованием Stream
в Foreach
и если вы хотите получить доступ к любым переменным вне этого метода, пометьте как окончательный. Поэтому я добавил объект AtomicInteger
больше информации Atomi c Целое число Oracle
// create another map contains the lowest status for each id
Map<Integer, Integer> lowestStatus = new HashMap<>();
for (Integer key : map.keySet()) {
// get the size of the list related to that id
int size = map.get(key).size();
int status = (3 - size) + 1;
final AtomicInteger statusCounter = new AtomicInteger(status);
if (status != 3) {
map.get(key).forEach(dashboard -> {
if (!lowestStatus.containsKey(key))
lowestStatus.put(key, statusCounter.get());
dashboard.setStatus(statusCounter.getAndIncrement());
});
} else {
Dashboard dashboard = map.get(key).get(0);
dashboard.setStatus(1);
lowestStatus.put(key, 1);
}
}
, еще одна версия
CurrentStatus
Чтобы отслеживать последнее состояние при наличии этого идентификатора
LowestStatus
Сохранить первое вхождение в заданном наборе строки с данным идентификатором примут 1 значение
Map<Integer, List<Dashboard>> map = new HashMap<>();
Map<Integer, Integer> lowestStatus = new HashMap<>();
Map<Integer, Integer> currentStatus = new HashMap<>();
while (rs.next()) {
Integer id = rs.getInt(1);
if (!map.containsKey(id)) {
map.put(id, new ArrayList<Dashboard>());
currentStatus.put(id, 0);
lowestStatus.put(id, 1);
}
Dashboard dash = new Dashboard();
dash.setRequestId(id);
dash.setLoginUser(rs.getString(2));
dash.setPrice(rs.getInt(3));
dash.setProcessed(rs.getInt(4));
dash.setStatus(currentStatus.get(id) + 1);
currentStatus.put(id, currentStatus.get(id) + 1); // update the status for the next iteration
map.get(id).add(dash);
}