programing

Java 8 어레이에서 스트림 및 작동

prostudy 2022. 4. 26. 21:54
반응형

Java 8 어레이에서 스트림 및 작동

나는 방금 새로운 Java 8 스트림 기능을 발견했다.파이톤에서 온 나는 이제 두 개의 배열을 "한 줄의 피톤" 방식으로 곱하는 것과 같은 배열에서 작업을 할 수 있는 깔끔한 방법이 있는지 궁금했다.

고마워요.

에 새로운 방법이 추가되었다.java.util.Arrays어레이를 Java 8 스트림으로 변환하여 SUM 등에 사용할 수 있다.

int sum =  Arrays.stream(myIntArray).sum();

스트림 작업과 동시에 값과 인덱스를 얻을 수 있는 방법을 생각할 수 없기 때문에 두 개의 어레이를 곱하는 것은 조금 더 어렵다.즉, 어레이의 인덱스로 스트리밍해야 할 수 있음.

//in this example a[] and b[] are same length
int[] a = ...
int[] b = ...
 
int[] result = new int[a.length];

IntStream.range(0, a.length).forEach(i -> result[i] = a[i] * b[i]);

코멘트 @Holger는 당신이 사용할 수 있다고 지적한다.map대신의 방법forEach, 다음과 같은 경우:

int[] result = IntStream.range(0, a.length).map(i -> a[i] * b[i]).toArray();

를 사용하여 배열을 스트림로 변환할 수 있다.Arrays.stream():

int[] ns = new int[] {1,2,3,4,5};
Arrays.stream(ns);

스트림을 얻으면 설명서에 설명된 방법 중 하나를 사용할 수 있으며,sum()뭐, 뭐 그런 거든.넌 할 수 있다.map또는filterPython에서처럼 람다 함수를 사용하여 관련 스트림 메서드를 호출하십시오.

Arrays.stream(ns).map(n -> n * 2);
Arrays.stream(ns).filter(n -> n % 4 == 0);

스트림 수정이 끝나면 전화를 걸어toArray()다른 곳에서 사용할 수 있도록 다시 배열로 변환하려면:

int[] ns = new int[] {1,2,3,4,5};
int[] ms = Arrays.stream(ns).map(n -> n * 2).filter(n -> n % 4 == 0).toArray();

많은 수를 처리해야 한다면 조심해라.

int[] arr = new int[]{Integer.MIN_VALUE, Integer.MIN_VALUE};
long sum = Arrays.stream(arr).sum(); // Wrong: sum == 0

위의 합은 아니다.2 * Integer.MIN_VALUE이럴 때는 이렇게 해야죠.

long sum = Arrays.stream(arr).mapToLong(Long::valueOf).sum(); // Correct

Arrays.stream(arr)은 스트림 대신 LongStream(또는 IntStream, ...)을 생성하므로 지도 기능을 사용하여 유형을 수정할 수 없다는 점에 유의하십시오.그래서 .mapToLong, mapToObject, ...기능이 제공된다.

왜-칸티-맵-인테거-스트링-스트링-스트리밍-오프-어레이닝

참조URL: https://stackoverflow.com/questions/24390463/java-8-stream-and-operation-on-arrays

반응형