【发布时间】:2020-04-03 13:43:27
【问题描述】:
有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;
}
感谢任何改进代码的建议。
【问题讨论】:
-
首先你需要写一些代码
-
为什么你认为 Java Stream API 很适合这里?
标签: java java-stream