[問題] Stream lazy evaluation詢問
最近在Java8 技術手冊中看到Java8新的應用
在以下的程式碼中
作者講解說:
程式片段的lines()方法實際上沒有進行任何一行的讀取,filter()也沒有作任何
一行的過濾,直到呼叫findFirst()時,filter()指定的條件才會真正去執行,而此時才
會要求lines()傳回的Stream進行第一行讀取,如果第一行就符合,那後續的行就不會再
讀取
String fileName = args[0];
String prefix = args[1];
Optional<String> firstMatchdLine =
Files.lines(Paths.get(fileName))
.filter(line -> line.startsWith(prefix))
.findFirst();
System.out.println(firstMatchdLine.orElse("no matched line"));
不太懂作者說方法不會執行直到findFirst()的意思,這段程式碼不是就從一開始就開始執
行嗎?,然後遇到正確結果就馬上跳出,所以才會比for迴圈似的外部迭代效率好
附上作者詳細解說 https://openhome.cc/Gossip/Java/Stream.html
請教各位前輩 感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.135.195
※ 文章網址: https://www.ptt.cc/bbs/java/M.1495851459.A.F3A.html
※ 編輯: Tverous (59.115.135.195), 05/27/2017 10:18:50
→
05/27 10:26, , 1F
05/27 10:26, 1F
→
05/27 10:26, , 2F
05/27 10:26, 2F
→
05/27 10:31, , 3F
05/27 10:31, 3F
→
05/27 10:33, , 4F
05/27 10:33, 4F
→
05/27 10:48, , 5F
05/27 10:48, 5F
→
05/27 10:50, , 6F
05/27 10:50, 6F
→
05/27 10:52, , 7F
05/27 10:52, 7F
→
05/27 10:53, , 8F
05/27 10:53, 8F
→
05/27 10:58, , 9F
05/27 10:58, 9F
→
05/27 11:00, , 10F
05/27 11:00, 10F
→
05/27 12:42, , 11F
05/27 12:42, 11F
java 近期熱門文章
PTT數位生活區 即時熱門文章