জাভা কি পাইথনের range(int, int)পদ্ধতির সমতুল্য ?
জাভা কি পাইথনের range(int, int)পদ্ধতির সমতুল্য ?
উত্তর:
পেয়ারা পাইথনের অনুরূপ কিছু সরবরাহ করে range:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
আপনি পেয়ারার অ্যাবস্ট্রাক্টিয়েটার ব্যবহার করে একই ধরণের কাজ করতে মোটামুটি সাধারণ পুনরুক্তি প্রয়োগ করতে পারেন:
return new AbstractIterator<Integer>() {
int next = getStart();
@Override protected Integer computeNext() {
if (isBeyondEnd(next)) {
return endOfData();
}
Integer result = next;
next = next + getStep();
return result;
}
};
Range#asSetমনে হচ্ছে অবচিত হয়ে গেছে। আপনার এখন এটি করা দরকার:ContiguousSet.create(Range.closed(low, high), DiscreteDomain.integers())
পুরানো প্রশ্ন, নতুন উত্তর (জাভা 8 এর জন্য)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
বা পদ্ধতি রেফারেন্স সহ:
IntStream.range(0, 10).forEach(System.out::println);
আমি Jools নামক একটি সামান্য জাভা ইউটিস লাইব্রেরিতে কাজ করছি , এবং এটিতে একটি শ্রেণি রয়েছে Rangeযা আপনার প্রয়োজনীয় কার্যকারিতা সরবরাহ করে (একটি ডাউনলোডযোগ্য জেআর আছে)।
কনস্ট্রাক্টরগুলি হয় Range(int stop), Range(int start, int stop)বা Range(int start, int stop, int step)(লুপের জন্য এক সাথে পরিচিত) এবং আপনি এটির মাধ্যমে পুনরাবৃত্তি করতে পারেন, যা অলস মূল্যায়ন ব্যবহার করেছে, বা আপনি পরিচ্ছন্নতার toList()তালিকাটি পরিষ্কারভাবে দেখতে এর পদ্ধতিটি ব্যবহার করতে পারেন ।
for (int i : new Range(10)) {...} // i = 0,1,2,3,4,5,6,7,8,9
for (int i : new Range(4,10)) {...} // i = 4,5,6,7,8,9
for (int i : new Range(0,10,2)) {...} // i = 0,2,4,6,8
Range range = new Range(0,10,2);
range.toList(); // [0,2,4,6,8]
পেয়ারা ১৫.০ থেকে, রেঞ্জ.এসসেট () অবচয় করা হয়েছে এবং সংস্করণ ১ 16-এ সরিয়ে ফেলার সময় নির্ধারণ করা হয়েছে instead পরিবর্তে নিম্নলিখিতটি ব্যবহার করুন:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
public int[] range(int start, int stop)
{
int[] result = new int[stop-start];
for(int i=0;i<stop-start;i++)
result[i] = start+i;
return result;
}
কোনও বাক্য গঠন বা শৈলীর ত্রুটিগুলি ক্ষমা করুন; আমি সাধারণত সি # তে প্রোগ্রাম করি।
public int[] range(int start, int length) {
int[] range = new int[length - start + 1];
for (int i = start; i <= length; i++) {
range[i - start] = i;
}
return range;
}
(কেবল "না" বলতে দীর্ঘ উত্তর দিন)
IntStream::iterateজাভা 9 হিসাবে আপনি ব্যবহার করতে পারেন IntStream::iterateএবং আপনি পদক্ষেপটি কাস্টমাইজও করতে পারেন। উদাহরণস্বরূপ যদি আপনি intঅ্যারে চান :
public static int[] getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.toArray();
}
বা List:
public static List<Integer> getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.boxed()
.collect(Collectors.toList());
}
এবং তারপরে এটি ব্যবহার করুন:
int[] range = getInRange(0, 10, 1);
গ্রোভির নিফটি রেঞ্জের ক্লাসটি জাভা থেকে ব্যবহার করা যেতে পারে, যদিও এটি অবশ্যই গ্রোভির মতো নয়।
"ফাংশনাল জাভা" গ্রন্থাগারটি এমনভাবে একটি সীমাবদ্ধ ডিগ্রীতে প্রোগ্রাম করার অনুমতি দেয়, এটির একটি পরিসর () পদ্ধতি রয়েছে একটি fj.data.Array উদাহরণ তৈরি করে।
দেখা:
একইভাবে "সম্পূর্ণ অলস" গ্রন্থাগারটি একটি অলস পরিসীমা পদ্ধতি সরবরাহ করে: http://code.google.com/p/totallylazy/
যদি আপনি এটি ব্যবহার করার অর্থ যদি আপনি পাইথন লুপে করেন তবে জাভা বিবৃতি দেওয়ার জন্য সুন্দরভাবে লুপ করেন যা এই উদ্দেশ্যে এই কাঠামোটিকে অপ্রয়োজনীয় করে তোলে।
IntStream.range(0, 10).boxed().collect(Collectors.toUnmodifiableList());