Java: Python의 범위(int, int)와 동등합니까?
Java는 Python과 동등합니까?range(int, int)
방법?
오래된 질문, 새로운 답변(Java 8의 경우)
IntStream.range(0, 10).forEach(n -> System.out.println(n));
또는 메서드 참조:
IntStream.range(0, 10).forEach(System.out::println);
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;
}
};
Jools라는 자바 유틸리티 라이브러리를 만들고 있는데 이 라이브러리에는Range
필요한 기능을 제공합니다(다운로드 가능한 JAR이 있습니다).
컨스트럭터는 다음 중 하나입니다.Range(int stop)
,Range(int start, int stop)
, 또는Range(int start, int stop, int step)
(for loop과 유사)를 사용하여 루프를 반복하거나 루프를 사용하여 루프를 반복할 수 있습니다.toList()
method를 사용하여 명시적으로 범위 목록을 가져옵니다.
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());
다음 코드 스니펫을 사용하여 정수 범위 세트를 가져올 수 있습니다.
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
(Collectors.toSet());
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;
}
('아니오'라고만 대답하는 긴 대답)
Java 9 - IntStream::iterate
Java 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);
IntStream.range(0, 10).boxed().collect(Collectors.toUnmodifiableList());
Groovy의 nifty Range 클래스는 Java에서 사용할 수 있지만, 확실히 groovy는 아닙니다.
"Functional Java" 라이브러리는 fj.data를 생성하는 range() 메서드를 가지고 있습니다.어레이 인스턴스
참조:
마찬가지로 "Totally Lazy" 라이브러리는 느린 범위 메서드를 제공합니다.http://code.google.com/p/totallylazy/
Python 루프에서와 같이 사용하는 경우 Java는 for 스테이트먼트를 사용하여 적절하게 루프하므로 이 구조를 사용할 필요가 없습니다.
오래된 게시물인 것은 알지만 오브젝트 스트림을 반환하고 추가 종속성을 사용하지 않거나 사용할 수 없는 솔루션을 찾는 경우:
Stream.iterate(start, n -> n + 1).limit(stop);
start - include stop - exclusive
자바 8
private static int[] range(int start, int stop, int step) {
int[] result = new int[(stop-start)%step == 0 ? (stop-start)/step : (stop-start)/step+1];
int count = 0;
Function<Integer, Boolean> condition = step > 0 ? (x) -> x < stop : (x) -> x > stop;
for (int i = start; condition.apply(i); i += step) {
result[count] = i;
count++;
}
return result;
}
언급URL : https://stackoverflow.com/questions/3790142/java-equivalent-of-pythons-rangeint-int
'source' 카테고리의 다른 글
Test Containers Framework가 도커 deamon에 연결할 수 없습니다. (0) | 2022.11.25 |
---|---|
술어와 일치하는 시퀀스에서 첫 번째 요소 찾기 (0) | 2022.11.25 |
Linux 위의 MariaDB | .sql 데이터베이스 접근 (0) | 2022.11.25 |
변수가 Python에 정의되어 있는지 확인합니다. (0) | 2022.11.25 |
지정된 행을 삽입할 때 MariaDB는 타임스탬프를 저장합니까? (0) | 2022.11.25 |