Bu ise mümkün Iterable.forEach()(ancak güvenilir olan Stream.forEach()). Solüsyon hoş değil, ama bir mümkün.
UYARI : İş mantığını kontrol etmek için değil, yalnızca uygulamasının gerçekleşmesi sırasında ortaya çıkan istisnai bir durumu ele almak için kullanmalısınız forEach(). Bir kaynağın aniden erişilebilir olması gibi, işlenen nesnelerden biri bir sözleşmeyi ihlal ediyor (örneğin sözleşme, akıştaki tüm öğelerin nulldeğil, aniden ve beklenmedik bir şekilde bunlardan biri olması gerektiğini söylüyor null) vb.
İçin belgelere göre Iterable.forEach():
Tüm öğeler işleninceye veya eylem bir istisna Iterable atana kadar verilen her eylem için verilen eylemi gerçekleştirir ... Eylem tarafından atılan istisnalar arayana aktarılır.
Böylece, iç döngüyü derhal kıracak bir istisna atarsınız.
Kod böyle bir şey olacak - Sevdim diyemem ama işe yarıyor. Kendi sınıfınızı BreakExceptionyaratırsınız RuntimeException.
try {
someObjects.forEach(obj -> {
// some useful code here
if(some_exceptional_condition_met) {
throw new BreakException();
}
}
}
catch (BreakException e) {
// here you know that your condition has been met at least once
}
O Bildirimi try...catcholduğu değil doğrusu etrafında bütün etrafında lambda ifadesi, ancak forEach()yöntem. Daha görünür hale getirmek için, kodu daha net gösteren aşağıdaki transkripsiyonuna bakın:
Consumer<? super SomeObject> action = obj -> {
// some useful code here
if(some_exceptional_condition_met) {
throw new BreakException();
}
});
try {
someObjects.forEach(action);
}
catch (BreakException e) {
// here you know that your condition has been met at least once
}
forifade kullanın .