আমি একটি সংগ্রহের মাধ্যমে পুনরাবৃত্তি করতে একটি আইট্রেটর ব্যবহার করছি এবং আমি বর্তমান উপাদানটির সূচক পেতে চাই।
আমি এটা কিভাবে করবো?
আমি একটি সংগ্রহের মাধ্যমে পুনরাবৃত্তি করতে একটি আইট্রেটর ব্যবহার করছি এবং আমি বর্তমান উপাদানটির সূচক পেতে চাই।
আমি এটা কিভাবে করবো?
উত্তর:
আপনার নিজের ভেরিয়েবল ব্যবহার করুন এবং লুপে এটি বৃদ্ধি করুন।
it.nextIndex()। যখন সংগ্রহটি একটি তালিকা হয় তখন দরকারী।
আমারও একই প্রশ্ন ছিল এবং একটি লিস্টিস্ট্রেটার ব্যবহার করে কাজ করে। উপরের পরীক্ষার মতো:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
নিশ্চিত হয়ে নিন যে আপনি প্রকৃতপক্ষে পরবর্তীটি () পেয়ে যাবার আগে আপনি পরবর্তী সূচকে কল করেছেন।
আপনার নিজের ভেরিয়েবলটি ব্যবহার করে এবং এটি সংক্ষিপ্ত রাখার জন্য এখানে একটি উপায় রয়েছে:
List<String> list = Arrays.asList("zero", "one", "two");
int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
String s = it.next();
System.out.println(i + ": " + s);
}
আউটপুট (আপনি এটি অনুমান করেছেন):
0: zero
1: one
2: two
সুবিধাটি হ'ল আপনি লুপের মধ্যে আপনার সূচককে বাড়িয়ে তুলবেন না (যদিও আপনাকে প্রতি لوুপের পরে কেবলমাত্র আইট্রেটারকে # কল করার জন্য সতর্কতা অবলম্বন করা দরকার - কেবল এটি শীর্ষে করুন)।
asList("zero", "one", "two")
আপনি ListIteratorগণনা করতে ব্যবহার করতে পারেন :
final List<String> list = Arrays.asList("zero", "one", "two", "three");
for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
final String s = it.next();
System.out.println(it.previousIndex() + ": " + s);
}
কিসের সংগ্রহ? যদি এটি তালিকা ইন্টারফেসের বাস্তবায়ন হয় তবে আপনি কেবল ব্যবহার করতে পারেন it.nextIndex() - 1।
সংগ্রহের মাধ্যমে পুনরাবৃত্তি করতে একটি তালিকাচালক ব্যবহার করুন । যদি সংগ্রহটি Arrays.asList(Collection.toArray())কোনও তালিকা না হয় তবে প্রথমে এটি তালিকাতে পরিণত করতে ব্যবহারের সাথে শুরু করুন ।
এই জাতীয় কিছু করুন:
ListIterator<String> it = list1.listIterator();
int index = -1;
while (it.hasNext()) {
index++;
String value = it.next();
//At this point the index can be checked for the current element.
}
একটি int ব্যবহার করুন এবং আপনার লুপের মধ্যে বৃদ্ধি করুন।
এখানে দেখুন ।
iterator.nextIndex()উপাদানগুলির সূচক সরবরাহ করবে যা পরবর্তী কল করে ফিরে আসবে next()।
আপনার পুনরুক্তিটি চালু থাকা বর্তমান সূচকটি ফিরিয়ে দিতে আপনার কেবল এটির ব্যবহারকারীর পুনরায় ব্যবহার করতে হবে ne এনেক্সট ইন্ডেক্স ()। এটি আপনার নিজের কাউন্টার ভেরিয়েবল ব্যবহার করার চেয়ে কিছুটা সহজ হতে পারে (এটি এখনও কার্যকর হয়)।
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
এই কোডটি তালিকাতে একবারে একটি আইটেমের মধ্য দিয়ে যাবে এবং আইটেমের পাঠ্যটি প্রিন্ট করবে, তারপরে "সূচীতে রয়েছে" তারপরে এটি সূচকটি মুদ্রণ করবে যা পুনরাবৃত্তিকারী এটি খুঁজে পেয়েছিল। :)
আপনার কাছে ইতিমধ্যে উত্তরটি থাকলেও কিছু তথ্য যুক্ত করার চিন্তা করে।
আপনি যেমন সংগ্রহগুলি স্পষ্টভাবে উল্লেখ করেছেন, আপনি listIteratorসমস্ত ধরণের সংগ্রহের সূচক পেতে ব্যবহার করতে পারবেন না ।
ইন্টারফেস তালিকা - অ্যারেলিস্ট, লিংকডলিস্ট, ভেক্টর এবং স্ট্যাক।
উভয় iterator()এবং আছেlistIterator()
ইন্টারফেস সেট করুন - হ্যাশসেট, লিংকডহ্যাশসেট, ট্রিসেট এবং এনামসেট।
শুধুমাত্র আছে iterator()
মানচিত্র ইন্টারফেস - হ্যাশম্যাপ, লিংকডহ্যাশম্যাপ, ট্রিম্যাপ এবং আইডেন্টিটি হ্যাশম্যাপ
কোনও পুনরুক্তি নেই, তবে keySet()/ values()বা entrySet()হিসাবে ব্যবহার করে পুনরাবৃত্তি করা যেতে পারে keySet()এবং entrySet()ফেরত Setএবং values()প্রত্যাবর্তন হয়Collection ।
সুতরাং iterators()কোনও সংগ্রহের ধরণের জন্য বর্তমান সূচকটি পেতে কোনও মানের ক্রমাগত বর্ধনের সাথে ব্যবহার করা আরও ভাল ।