Pertanyaan Java: Setara rentang Python (int, int)?


Apakah Java memiliki setara dengan Python range(int, int) metode?


75
2017-09-24 19:04


asal


Jawaban:


Jambu biji juga menyediakan sesuatu yang mirip dengan Python range:

Range.closed(1, 5).asSet(DiscreteDomains.integers());

Anda juga dapat 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;
  }
};

22
2017-11-27 17:40



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);

173
2018-04-07 04:00



Saya sedang mengerjakan perpustakaan Java utils kecil yang disebut Jools, dan itu berisi kelas Range yang menyediakan fungsionalitas yang Anda butuhkan (ada JAR yang dapat diunduh).
Konstruktor juga baik Range(int stop), Range(int start, int stop), atau Range(int start, int stop, int step) (mirip dengan for loop) dan Anda dapat mengulanginya, yang menggunakan evaluasi malas, atau Anda dapat menggunakan toList() metode untuk secara eksplisit mendapatkan daftar jangkauan.

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]

15
2017-09-29 19:01



Sejak Guava 15.0, Range.asSet () telah dihentikan dan dijadwalkan untuk dihapus dalam versi 16. Gunakan yang berikut ini sebagai gantinya:

ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());

15
2017-07-22 03:51



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 kesalahan sintaks atau gaya apa pun; Saya biasanya memprogram dalam C #.


14
2017-09-24 19:12



Anda dapat menggunakan cuplikan kode berikut untuk mendapatkan serangkaian bilangan bulat:

    Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
            (Collectors.toSet());

7
2018-03-09 17:21



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")


6
2017-09-24 19:10



Groovy bagus Kelas jangkauan dapat digunakan dari Jawa, meskipun tentu tidak selengis.


2
2018-02-12 23:49



Pustaka "Jawa Fungsional" memungkinkan untuk memprogram sedemikian rupa hingga tingkat yang terbatas, ia memiliki berbagai () metode pembuatan contoh fj.data.Array.

Lihat:

Demikian pula perpustakaan "Benar-benar Malas" menawarkan metode rentang malas: http://code.google.com/p/totallylazy/


2
2017-09-15 13:24



Jika Anda bermaksud menggunakannya seperti yang Anda lakukan dalam sebuah loop Python, Java loop dengan baik dengan pernyataan untuk, yang membuat struktur ini tidak diperlukan untuk tujuan itu.


1
2017-09-24 19:12