program story

자바 : Python의 범위 (int, int)와 동일합니까?

inputbox 2020. 8. 31. 07:45
반응형

자바 : Python의 범위 (int, int)와 동일합니까?


Java에는 Python의 range(int, int)방법 과 동등한 기능이 있습니까?


Guava 는 또한 Python과 유사한 것을 제공합니다 range.

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

Guava의 AbstractIterator를 사용하여 동일한 종류의 작업을 수행하는 매우 간단한 반복기를 구현할 수도 있습니다.

return new AbstractIterator<Integer>() {
  int next = getStart();

  @Override protected Integer computeNext() {
    if (isBeyondEnd(next)) {
      return endOfData();
    }
    Integer result = next;
    next = next + getStep();
    return result;
  }
};

이전 질문, 새 답변 (Java 8 용)

    IntStream.range(0, 10).forEach(
        n -> {
            System.out.println(n);
        }
    );

또는 메서드 참조 :

IntStream.range(0, 10).forEach(System.out::println);

Jools 라는 작은 Java 유틸리티 라이브러리에서 작업 중이며 Range필요한 기능을 제공 하는 클래스 포함되어 있습니다 (다운로드 가능한 JAR이 있습니다).
생성자 중 하나입니다 Range(int stop), Range(int start, int stop)또는 Range(int start, int stop, int step)(for 루프에 비슷한) 당신은 게으른 평가를 사용하는, 그것을 통해서 반복 처리를 할 수있다, 또는 당신이 사용할 수있는 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]

Guava 15.0 이후 Range.asSet () 는 더 이상 사용되지 않으며 버전 16에서 제거 될 예정입니다. 대신 다음을 사용하십시오.

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

구문 또는 스타일 오류를 용서하십시오. 나는 일반적으로 C #으로 프로그래밍합니다.


범위의 정수 세트를 가져 오기 위해 다음 코드 스 니펫을 사용할 수 있습니다.

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

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

(단지 "아니오"라고 말하는 긴 대답)


Groovy의 멋진 Range 클래스 는 Java에서 사용할 수 있지만 확실히 그루비는 아닙니다.


"Functional Java"라이브러리는 제한된 정도의 프로그래밍을 허용하며 fj.data.Array 인스턴스를 생성하는 range () 메소드를 가지고 있습니다.

보다:

마찬가지로 "Totally Lazy"라이브러리는 지연 범위 방법을 제공합니다. http://code.google.com/p/totallylazy/


If you mean to use it like you would in a Python loop, Java loops nicely with the for statement, which renders this structure unnecessary for that purpose.


Since Java 9 you can use IntStream::iterate and you can even customize the step. For example if you want int array :

public static int[] getInRange(final int min, final int max, final int step) {
    return IntStream.iterate(min, operand -> operand < max, operand -> operand + step)
            .toArray();
}

or List :

public static List<Integer> getInRange(final int min, final int max, final int step) {
    return IntStream.iterate(min, operand -> operand < max, operand -> operand + step)
            .boxed()
            .collect(Collectors.toList());
}

참고URL : https://stackoverflow.com/questions/3790142/java-equivalent-of-pythons-rangeint-int

반응형