Program Club

Java 스트림 toArray ()는 특정 유형의 배열로 변환

proclub 2020. 11. 27. 21:41
반응형

Java 스트림 toArray ()는 특정 유형의 배열로 변환


아마도 이것은 매우 간단하지만 실제로 Java 8 기능에 대한 멍청한 사람이고 이것을 수행하는 방법을 모릅니다. 다음 텍스트가 포함 된 간단한 줄이 있습니다.

"키, 이름"

각 값을 쉼표 (,)로 구분하여 해당 줄을 String 배열로 변환하고 싶지만 최종 배열을 반환하기 전에 모든 필드를 잘라 내고 싶으므로 다음을 수행했습니다.

Arrays.stream(line.split(",")).map(String::trim).toArray();

그러나 이것은 String [] 배열이 아닌 Object [] 배열을 리턴합니다. 추가 검사를 통해 내용이 실제로 String 인스턴스임을 확인할 수 있지만 배열 자체는 Object 요소입니다. 이것을 설명하겠습니다. 이것은 디버거가 반환 된 객체에 대해 말하는 것입니다.

Object[]:
    0 = (String) "Key"
    1 = (String) "Name"

내가 알 수있는 한 문제는 맵 호출의 반환 유형에 있지만 String [] 배열을 반환하려면 어떻게해야합니까?


사용 toArray(size -> new String[size])또는 toArray(String[]::new).

String[] strings = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);

이것은 실제로 람다 식입니다.

.toArray(new IntFunction<String[]>() {
        @Override
        public String[] apply(int size) {
            return new String[size];
        }
    });

배열을 동일한 크기의 문자열 배열로 변환하십시오.

로부터 문서

생성기 함수는 원하는 배열의 크기 인 정수를 사용하여 원하는 크기의 배열을 생성합니다. 이것은 배열 생성자 참조로 간결하게 표현할 수 있습니다.

 Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);

유형 매개 변수 :

A-결과 배열의 요소 유형

매개 변수 :

생성기-원하는 유형과 제공된 길이의 새 배열을 생성하는 함수


String[]::new호출하는 기능입니다 new은 "의사 방법" String[]처럼 타입을 String::trim함수입니다 호출하는 실제 trim문자열 유형의 방법. String::newtoArray에 의해 함수에 전달 된 값 은 .toArray () 메서드 호출의 오른쪽에있는 컬렉션의 크기입니다.

당신이 교체 한 경우 String[]::newn->new String[n]당신이 대체 할 수있는 것처럼 구문 더 편안 수 있습니다 String::trim덜 시원한으로s->s.trim()

참고 URL : https://stackoverflow.com/questions/40902315/java-stream-toarray-convert-to-a-specific-type-of-array

반응형