Существует Java класс:
public class Item {
private String dateModified;
private Integer color;
}
, где dateModified in format "hh:mm:ss",
и ArrayList<Item>
список, который содержит 10 элементов.
Итак, я хочу проверить мой список и:
if now() - dateModified > 1 min , then change color to 1
if now() - dateModified > 5 min , then change color to 2
if now() - dateModified > 10 min, then change color to 3
Как реализовать это с Java Stream API?
ОБНОВЛЕНИЕ: Я реализовал свою задачу в таком коде ниже. Это работает как ожидалось, но кажется огромным и не элегантным. Я забыл сказать, что список должен быть изменяемым.
list.stream()
.map(c -> {
if (compareTime(c.getDateModified(), 600)) {
c.setColor(3);
} else if (compareTime(c.getDateModified(), 300)) {
c.setColor(2);
} else if (compareTime(c.getDateModified(), 60)) {
c.setColor(1);
}
return c;
}).collect(Collectors.toList());
private boolean compareTime(String dateModified, Integer delta) {
boolean result = false;
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
Integer secondsDateModified = Integer.parseInt(dateModified.substring(0, 2)) * 3600 +
Integer.parseInt(dateModified.substring(3, 5)) * 60 +
Integer.parseInt(dateModified.substring(6, 8)) ;
Integer secondsNow = hour * 3600 + minute * 60 + second ;
Integer delta1 = secondsNow - secondsDateModified;
if ((delta1) > delta) {
result = true;
}
return result;
}
Любые предложения по улучшению кода приветствуются.