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
또는filter
Python에서처럼 람다 함수를 사용하여 관련 스트림 메서드를 호출하십시오.
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
'programing' 카테고리의 다른 글
Vue 3 구성 요소 내부의 Vuex 4 상태 데이터를 다른 디스패치를 위한 페이로드로 사용하는 방법 (0) | 2022.04.27 |
---|---|
계산된 속성을 사용할 때 $store 속성이 반응하지 않음(Vuex) (0) | 2022.04.26 |
C와 C++에서 거의 동일한 코드 간의 실행 시간에서 큰 차이(x9) (0) | 2022.04.26 |
템플릿 내에서 값을 반환하는 기능을 사용하는 방법브룩스, 브룩스 (0) | 2022.04.26 |
null을 ternary 연산자에 허용된 int로 반환하지만 문이 아닌 경우 (0) | 2022.04.26 |