ব্যবহার lambdas এবং কার্মিক ইন্টারফেসগুলি মধ্যে জাভা 8 তোলে নতুন লুপ বিমূর্ত সম্ভব তৈরি করা। আমি সূচক এবং সংগ্রহের আকারের সাহায্যে একটি সংগ্রহকে লুপ করতে পারি:
List<String> strings = Arrays.asList("one", "two","three","four");
forEach(strings, (x, i, n) -> System.out.println("" + (i+1) + "/"+n+": " + x));
কোন ফলাফল:
1/4: one
2/4: two
3/4: three
4/4: four
যা আমি হিসাবে প্রয়োগ করেছি:
@FunctionalInterface
public interface LoopWithIndexAndSizeConsumer<T> {
void accept(T t, int i, int n);
}
public static <T> void forEach(Collection<T> collection,
LoopWithIndexAndSizeConsumer<T> consumer) {
int index = 0;
for (T object : collection){
consumer.accept(object, index++, collection.size());
}
}
সম্ভাবনার শেষ নেই. উদাহরণস্বরূপ, আমি একটি বিমূর্ততা তৈরি করেছি যা কেবলমাত্র প্রথম উপাদানটির জন্য একটি বিশেষ ফাংশন ব্যবহার করে:
forEachHeadTail(strings,
(head) -> System.out.print(head),
(tail) -> System.out.print(","+tail));
যা কমা দ্বারা পৃথক করা তালিকাটি সঠিকভাবে মুদ্রণ করে:
one,two,three,four
যা আমি হিসাবে প্রয়োগ করেছি:
public static <T> void forEachHeadTail(Collection<T> collection,
Consumer<T> headFunc,
Consumer<T> tailFunc) {
int index = 0;
for (T object : collection){
if (index++ == 0){
headFunc.accept(object);
}
else{
tailFunc.accept(object);
}
}
}
গ্রন্থাগারগুলি এই ধরণের জিনিসগুলি করতে পপ আপ করা শুরু করবে বা আপনি নিজেরাই রোল করতে পারেন।
Type var = null; for (var : set) dosomething; if (var != null) then ...