關於java8新特性中的lambda表達式,靜態方法引用以及stream api迭代的寫法
世界只因有你
世界只因有你 2017-05-17 10:04:45
0
2
684

初學java8的語法,對於單獨使用lambda表達式,1.8的靜態方法引用表示法以及1.8的streamapi中forEach ()的引用已經有了初步了解,但是在做練習的過程中,遇到瞭如下程式碼:

public class Java8 { private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public static NavigableSet getUniqueAndNavigableLowerCaseMakeNames(VehicleLoader vehicleLoader) { Region[] regions = Region.values(); final CountDownLatch latch = new CountDownLatch(regions.length); final Set uniqueVehicleMakes = new HashSet<>(); for (Region region : regions) { EXECUTOR.submit(new Runnable() { @Override public void run() { List regionMakes = vehicleLoader.getVehicleMakesByRegion(region.name()); if (regionMakes != null) { uniqueVehicleMakes.addAll(regionMakes); } latch.countDown(); } }); } try { latch.await(); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); throw new RuntimeException(ie); } NavigableSet navigableMakeNames = new ConcurrentSkipListSet<>(); for (VehicleMake make : uniqueVehicleMakes) { if (make.getName() == null) { continue; } navigableMakeNames.add(make.getName().toLowerCase()); } return navigableMakeNames; }

對於這部分內容,如果全部改寫成1.8的寫法,應該如何改寫最美?初學這部分內容,例如對於new runnable部分,如果是lambda表達式再串聯著EXECUTOR::submid方法和Stearm.forEach()使用的話,文法上總是會報錯,而且相關資料較少,查詢了很多資料也沒有解決,希望有前輩可以用1.8的語法形式把以上代碼改寫一下,以便更好的理解java8的新特性。

世界只因有你
世界只因有你

全部回覆 (2)
刘奇

看了一下,刨去異常處理,可以改寫為以下程式碼:

return Arrays.stream(Region.values()) .flatMap(region -> vehicleLoader.getVehicleMakesByRegion(region.name()).stream()) .distinct() .filter(make -> make.getName() != null) .collect(Collectors.toCollection(ConcurrentSkipListSet::new));
    某草草

    先把 匿名內部類別改成 箭頭函數 在將for改為forEach

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!