Rumah  >  Soal Jawab  >  teks badan

Mengenai ungkapan lambda, rujukan kaedah statik dan lelaran api aliran dalam ciri baharu java8

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.

世界只因有你世界只因有你2712 hari yang lalu733

membalas semua(2)saya akan balas

  • 怪我咯

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

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

    balas
    0
  • 某草草

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

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

    balas
    0
  • Batalbalas