recherche

Maison  >  Questions et réponses  >  le corps du texte

À 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

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.

世界只因有你世界只因有你2782 Il y a quelques jours799

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-05-17 10:06:45

    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));

    répondre
    0
  • 某草草

    某草草2017-05-17 10:06:45

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

    répondre
    0
  • Annulerrépondre