並列ストリームとラムダを使用して以下のコードを実行することは可能ですか? 私はそれを通過する方法がわかりません。Java 8 - ExecutorServiceを置き換えるためのラムダとストリーム
public static NavigableSet<String> getDistinctNavigableLowerCaseMakeNames(Loader loader) {
String[] regions = {Japan, Germany, USA};
final CountDownLatch latch = new CountDownLatch(regions.length);
Set<Make> unique = new HashSet<>();
for (Region region : regions) {
EXECUTOR.submit(new Runnable() {
@Override public void run() {
List<Make> regionMakes = getVehicleMakesByRegion(region); //provides all the vehicles based on the region
unique.addAll(regionMakes);
latch.countDown();
}
});
}
try {
latch.await();
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new RuntimeException(ie);
}
return unique;
}
Makeは、最終変数id、region、nameからなるクラスです。このようなものについては、それは少し短いどのように見えるか
私たちの靴を履いてください。あなたは複雑なコードを投げ捨てて、基本的に "lambdasとStreamsを使って書き直してください"と尋ねました。助けが必要な場合は、他の人があなたを助けてくれるようにすることはあなた次第です。それはコードが何をしているのかを説明し、問題を解決しようとしていることを示すことです。 –
元のコードが壊れています。スレッドセーフではない 'HashSet'を同時に変更しています。 – Holger