一个小小的背景:我尝试通过获取关键输入瞬间之间的平均差异来检测条形码扫描仪信号(此模型在打印扫描值后按下输入)。
最近我一直在关注Subramanian关于Java 8的讨论,所以,我不明白如何将这个循环转换为流。
List<Instant> instants = new ArrayList<>();
content.addEventFilter(KeyEvent.KEY_RELEASED, e->{
switch (e.getCode()) {
case ENTER:
int sum = 1;//sum starts at one to prevent division by zero failure
for(int i = 1 ; i < instants.size(); i++) {
sum+=ChronoUnit.MILLIS.between(instants.get(i), instants.get(i-1));
}
System.out.println(sum/instants.size());
//average barcode is 3 or 4
//my best try was about 90, it's pretty safe...i guess
instants.clear();
break;
default:
instants.add(Instant.now());
break;
}
});
答案 0 :(得分:1)
您不需要循环或流,因为差异的总和与第一个和最后一个之差相同。
你只需要这个单行:
int sum = ChronoUnit.MILLIS.between(instants.get(0), instants.get(instants.size() -1));