Apakah Java memiliki persamaan dengan range(int, int)metode Python ?
Apakah Java memiliki persamaan dengan range(int, int)metode Python ?
Jawaban:
Guava juga menyediakan sesuatu yang mirip dengan Python range:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
Anda juga bisa menerapkan iterator yang cukup sederhana untuk melakukan hal yang sama menggunakan AbstractIterator Guava:
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#asSettampaknya sudah usang. Anda sekarang perlu melakukan ini:ContiguousSet.create(Range.closed(low, high), DiscreteDomain.integers())
Pertanyaan lama, jawaban baru (untuk Java 8)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
atau dengan referensi metode:
IntStream.range(0, 10).forEach(System.out::println);
Sejak Guava 15.0, Range.asSet () tidak lagi digunakan dan dijadwalkan untuk dihapus di versi 16. Gunakan yang berikut ini sebagai gantinya:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
Saya sedang mengerjakan pustaka Java utils kecil bernama Jools , dan itu berisi kelas Rangeyang menyediakan fungsionalitas yang Anda butuhkan (ada JAR yang dapat diunduh).
Konstruktor adalah salah satu Range(int stop),, Range(int start, int stop)atau Range(int start, int stop, int step)(mirip dengan loop for) dan Anda dapat mengulanginya, yang menggunakan evaluasi malas, atau Anda dapat menggunakan toList()metodenya untuk mendapatkan daftar rentang secara eksplisit.
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;
}
Maafkan sintaks atau kesalahan gaya; Saya biasanya memprogram dalam 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;
}
(Jawaban panjang hanya untuk mengatakan "Tidak")
IntStream::iterateSejak Java 9 Anda dapat menggunakan IntStream::iteratedan Anda bahkan dapat menyesuaikan langkahnya. Misalnya jika Anda menginginkan intarray:
public static int[] getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.toArray();
}
atau 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());
}
Dan kemudian gunakan:
int[] range = getInRange(0, 10, 1);
Kelas Range Groovy yang bagus dapat digunakan dari Java, meskipun tidak terlalu asyik.
Pustaka "Java Fungsional" memungkinkan untuk memprogram sedemikian rupa hingga tingkat yang terbatas, ia memiliki metode range () yang membuat turunan fj.data.Array.
Lihat:
Demikian pula, pustaka "Benar-benar Malas" menawarkan metode rentang malas: http://code.google.com/p/totallylazy/
Jika Anda bermaksud menggunakannya seperti yang Anda lakukan dalam perulangan Python, Java melakukan loop dengan baik dengan pernyataan for, yang membuat struktur ini tidak diperlukan untuk tujuan itu.
IntStream.range(0, 10).boxed().collect(Collectors.toUnmodifiableList());