Mengenai ungkapan lambda, rujukan kaedah statik dan lelaran api aliran dalam ciri baharu java8
世界只因有你
世界只因有你 2017-05-17 10:04:45
0
2
795

Saya baru dalam sintaks Java8 dan sudah mempunyai pemahaman awal menggunakan lambda表达式,1.8的静态方法引用表示法以及1.8的streamapi中forEach() sahaja untuk rujukan Namun, semasa latihan, saya menemui kod berikut:

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

 

Untuk bahagian kandungan ini, jika semuanya ditulis semula kepada kaedah penulisan 1.8, bagaimanakah ia harus ditulis semula dengan cara yang paling indah? Untuk pemula, sebagai contoh, untuk bahagian runnable yang baru, jika anda menggunakan lambda表达式再串联着EXECUTOR::submid方法和Stearm.forEach(), anda akan sentiasa mendapat ralat sintaks, dan terdapat maklumat yang kurang relevan Saya telah mencari banyak maklumat dan saya harap sesetengah warga emas boleh gunakan borang sintaks 1.8 untuk menyusun kod di atas untuk lebih memahami ciri baharu java8.

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

membalas semua(2)
刘奇

Selepas melihat, tidak termasuk pengendalian pengecualian, ia boleh ditulis semula sebagai kod berikut:

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

Mula-mula tukar kelas dalaman tanpa nama kepada fungsi anak panah dan kemudian tukar kepada forEach

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan