为了账号安全,请及时绑定邮箱和手机立即绑定

关于java8新特性中的lambda表达式,静态方法引用以及stream api迭代的写法

关于java8新特性中的lambda表达式,静态方法引用以及stream api迭代的写法

森栏 2019-03-01 11:06:24
初学java8的语法,对于单独使用lambda表达式,1.8的静态方法引用表示法以及1.8的streamapi中forEach()的引用已经有了一个初步了解,但是在做练习的过程中,遇到了如下代码: public class Java8 { private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public static NavigableSet<String> getUniqueAndNavigableLowerCaseMakeNames(VehicleLoader vehicleLoader) { Region[] regions = Region.values(); final CountDownLatch latch = new CountDownLatch(regions.length); final Set<VehicleMake> uniqueVehicleMakes = new HashSet<>(); for (Region region : regions) { EXECUTOR.submit(new Runnable() { @Override public void run() { List<VehicleMake> 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<String> 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 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

先把 匿名内部类改成 箭头函数 在将for改为forEach

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信