Java 8 스트림 및 어레이 작업
방금 새로운 Java 8 스트림 기능을 발견했습니다. 파이썬에서 왔을 때, 합산과 같은 배열에서 연산을 수행하는 깔끔한 방법이 있는지 궁금합니다. 두 배열을 "한 줄 피 토닉"방식으로 곱한 것입니까?
감사
java.util.Arrays
배열을 Java 8 스트림으로 변환하여 합산 등에 사용할 수 있는 새로운 메소드가 추가되었습니다 .
int sum = Arrays.stream(myIntArray)
.sum();
Stream 연산과 동시에 값과 인덱스를 얻는 방법을 생각할 수 없으므로 두 배열을 곱하면 조금 더 어려워집니다. 이것은 아마도 배열의 인덱스를 통해 스트리밍해야 함을 의미합니다.
//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]);
편집하다
Commenter @Holgermap
는 다음 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()
또는 무엇이든을. Lambda 함수를 사용하여 관련 스트림 메서드를 호출하여 Python에서 map
또는 filter
좋아할 수 있습니다 .
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)은 Stream 대신 LongStream (또는 IntStream, ...)을 생성하므로지도 함수를 사용하여 유형을 수정할 수 없습니다. .mapToLong, mapToObject, ... 함수가 제공되는 이유입니다.
배열에서 스트리밍 할 때 왜 i-map-integers-to-strings를 살펴보십시오.
참고 URL : https://stackoverflow.com/questions/24390463/java-8-stream-and-operation-on-arrays
'IT story' 카테고리의 다른 글
IntelliJ 별표 (패키지) 가져 오기를 비활성화 하시겠습니까? (0) | 2020.05.14 |
---|---|
무효가 아닌 메소드 컴파일에서 누락 된 리턴 문 (0) | 2020.05.14 |
node.js에 JS 대신 CoffeeScript를 사용할 수 있습니까? (0) | 2020.05.14 |
XSLT에서 새로운 라인 생성 (0) | 2020.05.14 |
CSS3 전환 이벤트 (0) | 2020.05.14 |