我使用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