programing

Java 8 forIndex(색인 포함)

prostudy 2022. 5. 12. 21:56
반응형

Java 8 forIndex(색인 포함)

건축을 할 수 있는 방법은 없을까?forEachJava 8에서 인덱스로 반복하는 방법?이상적으로 나는 이런 것을 원한다.

params.forEach((idx, e) -> query.bind(idx, e));

내가 지금 할 수 있는 최선은 다음과 같다.

int idx = 0;
params.forEach(e -> {
  query.bind(idx, e);
  idx++;
});

색인 가능한 집합(목록 등)에 대해 반복하고 있으므로, 다음과 같은 요소들의 지수로 반복할 수 있다고 가정한다.

IntStream.range(0, params.size())
  .forEach(idx ->
    query.bind(
      idx,
      params.get(idx)
    )
  )
;

결과 코드는 보다 쉬운 병렬 처리(물론, 동시 읽기 전용 액세스가 안전하다고 가정할 때)를 제외하고 루프용 고전적인 i++-스타일로 목록을 반복하는 것과 유사하다.

현재 인덱스를 포함하는 하나의 요소로 배열을 캡처할 경우 매개 변수와 함께 작동한다.

int[] idx = { 0 };
params.forEach(e -> query.bind(idx[0]++, e));

위의 코드는 에 대한 방법이 조우 순서의 요소를 통해 반복된다고 가정한다.Itable 인터페이스는 달리 문서화되지 않은 한 모든 클래스에 대해 이 동작을 지정한다.분명히 그것은 표준 라이브러리에서 Ituply의 모든 구현에 적용되며, 미래에 이러한 행동을 변경하면 역호환성을 깨게 될 것이다.

모음/항목 대신 스트림을 사용하여 작업하는 경우, 각 항목을 동시에 실행할 수 있고 요소가 다른 순서로 발생할 수 있으므로 각 순서에 대해 각 순서에 대해 사용하십시오.다음 코드는 순차 및 병렬 스트림 모두에 대해 작동한다.

int[] idx = { 0 };
params.stream().forEachOrdered(e -> query.bind(idx[0]++, e));

해결책은 있지만, 하천으로 하는 깨끗하고 짧은/단순한 방법은 없으며, 솔직히 말해서, 다음과 같은 방법으로 하는 것이 좋을 것이다.

int idx = 0;
for (Param p : params) query.bind(idx++, p);

또는 이전 스타일:

for (int idx = 0; idx < params.size(); idx++) query.bind(idx, params.get(idx));

참조URL: https://stackoverflow.com/questions/22793006/java-8-foreach-with-index

반응형