Je suis nouveau dans la syntaxe Java8 et j'ai déjà une compréhension préliminaire de l'utilisation des références lambda表达式
,1.8的静态方法引用
表示法以及1.8的stream
api中forEach()
seules, mais pendant l'exercice, j'ai rencontré le code suivant :
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;
}
Pour cette partie du contenu, si tout est réécrit selon la méthode d'écriture 1.8, comment doit-il être réécrit de la plus belle des manières ? Pour les débutants, par exemple, pour la nouvelle partie exécutable, si vous utilisez lambda表达式
再串联着EXECUTOR::submid
方法和Stearm.forEach()
, vous obtiendrez toujours une erreur de syntaxe, et il y a moins d'informations pertinentes. J'ai cherché beaucoup d'informations et j'espère que certains seniors n'y parviendront pas. utilisez le formulaire de syntaxe 1.8 pour compiler le code ci-dessus pour mieux comprendre les nouvelles fonctionnalités de java8.
Après y avoir jeté un coup d'œil, hors gestion des exceptions, il peut être réécrit comme le code suivant :
Changez d'abord la classe interne anonyme en fonction de flèche, puis changez for en forEach