我使用Java 8个流API是这样的:开销:原始流之间的转换与拳击
private Function<Long, Float> process; // Intermediate step (& types)
private long getWeekFrequency(final ScheduleWeek week) {
return week.doStreamStuff().count(); // Stream<>.count() returns long
}
@Override
public float analyse(final Schedule sample) {
return (float) sample // cast back to float
.getWeeks()
.stream()
.mapToLong(this::getWeekFrequency) // object to long
.mapToDouble(process::apply) // widen float to double
.sum();
}
@Override
public String explain(final Schedule sample) {
return sample
.getWeeks()
.stream()
.map(this::getWeekFrequency) // change stream type?
.map(String::valueOf)
.collect(Collectors.joining(", "));
}
问题
我假设有头顶物体之间切换时/原始流类型...如果我坚持流<>,这与拳击开销相比如何?
如果我后来改回来,怎么办?
具体:
在分析师,我应该使用.map(...).mapToDouble(...)
?
在解释,我应该使用.mapToLong(...).mapToObj(...)
?
我还有一个问题需要补充:在系统中它有多重要?你有没有体验/期望这方面的任何性能问题? “我应该考虑只用双倍/双倍” - 您的业务需求建议如何?你的模型是什么样的? – Thomas
如果这是您希望改进的工作代码,该问题可能会在[CodeReview SE](https://codereview.stackexchange.com/)上吸引更多有趣的答案。然而,它可能需要返工以包含您简化的部分以及相关类的定义。 – Aaron
@Thomas - 我现在对表演相当舒服(这足以让我看重可读性)。我想我要求更多的了解是否在流的中间部分正确使用mapToLong()和map()。我会重复双倍/双倍......这太开放了。 – AjahnCharles