[java] Java 8 스트림을 배열로 변환하는 방법?

Java 8 Stream을 배열로 변환하는 가장 쉬운 방법은 무엇입니까 ?



답변

가장 쉬운 방법은 toArray(IntFunction<A[]> generator)배열 생성자 참조와 함께 메서드 를 사용하는 것입니다. 이것은 메소드API 문서 에서 제안됩니다 .

String[] stringArray = stringStream.toArray(String[]::new);

그것이하는 일은 정수 (크기)를 인수로 취하고 String[]정확히 (오버로드 중 하나) 가하는 것을 반환하는 메소드를 찾는 것입니다 new String[].

당신은 또한 자신을 쓸 수 있습니다 IntFunction:

Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);

의 목적은 IntFunction<A[]> generator배열의 크기 인 정수를 새로운 배열로 변환하는 것입니다.

예제 코드 :

Stream<String> stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);

인쇄물:

a
b
c


답변

Stream에서 1에서 10까지의 값을 가진 정수 배열을 얻으려면 IntStream이 있습니다.

여기에서는 Stream.of 메서드를 사용하여 Stream을 만들고 mapToInt를 사용하여 Stream을 IntStream으로 변환합니다. 그런 다음 IntStream의 toArray 메소드를 호출 할 수 있습니다.

Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream 
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array =  stream.mapToInt(x -> x).toArray();

IntStream 만 사용하여 Stream이없는 동일한 내용이 있습니다.

int[]array2 =  IntStream.rangeClosed(1, 10).toArray();


답변

이 간단한 코드 블록을 사용하여 Java 8 스트림을 배열로 변환 할 수 있습니다.

 String[] myNewArray3 = myNewStream.toArray(String[]::new);

그러나 먼저 더 자세히 설명해 봅시다. 먼저 세 가지 값으로 채워진 문자열 목록을 만들어 봅시다.

String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};

지정된 Array에서 스트림을 만듭니다.

Stream<String> stringStream = Arrays.stream(stringList);

이제이 스트림에서 일부 작업을 수행 할 수 있습니다. 예 :

Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());

마지막으로 다음 방법을 사용하여 Java 8 Array로 변환하십시오.

1- 클래식 방법 (기능 인터페이스)

IntFunction<String[]> intFunction = new IntFunction<String[]>() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
};


String[] myNewArray = myNewStream.toArray(intFunction);

2-람다 표현

 String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);

3- 방법 참조

String[] myNewArray3 = myNewStream.toArray(String[]::new);

메소드 참조 설명 :

람다 식을 작성하는 다른 방법으로 다른 식과 완전히 동일합니다.


답변

텍스트를 문자열 배열로 변환하여 각 값을 쉼표로 구분하고 모든 필드를 자릅니다 (예 :

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


답변

스트림을 배열로 변환하는 사용자 지정 수집기를 만들 수 있습니다.

public static <T> Collector<T, ?, T[]> toArray( IntFunction<T[]> converter )
{
    return Collectors.collectingAndThen(
                  Collectors.toList(),
                  list ->list.toArray( converter.apply( list.size() ) ) );
}

빠른 사용

List<String> input = Arrays.asList( ..... );

String[] result = input.stream().
         .collect( CustomCollectors.**toArray**( String[]::new ) );


답변

사용하여 toArray(IntFunction<A[]> generator) 방법을 것은 실제로 스트림을 동일한 유형의 스트림 배열로 변환 (또는 더 정확하게 수집)하는 매우 우아하고 안전한 방법입니다.

반환 된 배열의 형식이 중요하지 않은 경우, 간단하게 사용하는 toArray()방법은 모두 쉽게 하고 짧은. 예를 들면 다음과 같습니다.

    Stream<Object> args = Stream.of(BigDecimal.ONE, "Two", 3);
    System.out.printf("%s, %s, %s!", args.toArray());


답변

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);

int[] arr=   stream.mapToInt(x->x.intValue()).toArray();