[英]Java 8 stream map reusing assigned variable
我知道標題可能會有些混亂,但是我無法提出更好的標題,所以讓我解釋一下我的意思...
我有這段代碼:
int spacing = Integer.MAX_VALUE;
for (Edge edge : edges) {
if (!union.connected(edge.getStart(), edge.getEnd())) {
spacing = Math.min(spacing, edge.getWeight());
}
}
有沒有辦法將此代碼轉換為Java 8代碼?
當然,第一步是過濾,這很簡單,但是隨后變得更加棘手,因為我將不得不在Stream :: map方法中重用計算出的變量spacing
,而且我不知道這是可能的。
我不太確定語法(我無法對其進行測試),但是它應該可以像這樣工作:
int spacing = edges.stream()
.filter(edge -> !union.connected(edge.getStart(), edge.getEnd()))
.min (Collectors.comparing(Edge::getWeight))
.map (Edge::getWeight) // get the weight of the min Edge
.orElse(Integer.MAX_VALUE);
不確定比較器傳遞給min
。
如果上面的代碼不起作用,則可以mapToInt
(假設getWeight()
返回int):
int spacing = edges.stream()
.filter(edge -> !union.connected(edge.getStart(), edge.getEnd()))
.mapToInt(Edge::getWeight)
.min ()
.orElse(Integer.MAX_VALUE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.