簡體   English   中英

Java 8流圖重用分配的變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM