À propos des expressions lambda, des références de méthodes statiques et de l'itération de l'API de flux dans les nouvelles fonctionnalités de Java8
世界只因有你
世界只因有你 2017-05-17 10:04:45
0
2
767

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的streamapi中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.

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

répondre à tous(2)
刘奇

Après y avoir jeté un coup d'œil, hors gestion des exceptions, il peut être réécrit comme le code suivant :

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

Changez d'abord la classe interne anonyme en fonction de flèche, puis changez for en forEach

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal