क्या जावा पायथन की 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);
अमरूद 15.0 के बाद से, Range.asSet () को हटा दिया गया है और इसे 16 संस्करण में हटा दिया जाएगा। इसके बजाय निम्नलिखित का उपयोग करें:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
मैं जूल नामक एक छोटी सी जावा यूटिलिटी लाइब्रेरी पर काम कर रहा हूं , और इसमें एक वर्ग शामिल है 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]
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;
}
किसी भी वाक्यविन्यास या शैली त्रुटियों को क्षमा करें; मैं सामान्य रूप से C # में कार्यक्रम करता हूं।
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());