programing

기존 스트림에 새로운 가치 추가

javaba 2022. 10. 26. 21:21
반응형

기존 스트림에 새로운 가치 추가

값을 값에 할 수 있는 요?Stream내가 상상할 수 있는 건 이런 거야

public <T> Stream<T> addToStream(Stream<T> stream, T elem ) {
    List<T> result = stream.collect(Collectors.toList());
    result.add(elem);
    return result.stream();
}

그러나 나는 장황함 없이 람다 표현에 사용할 수 있는 더 간결한 것을 찾고 있다.

PECS 원칙을 구현하려고 했을 때 또 다른 질문이 나왔습니다.

public <T> Stream<? super T> addToStream(Stream<? super T> stream, T elem ) {
    List<? super T> result = stream.collect(Collectors.toList()); //error
    result.add(elem);
    return result.stream();
}

일드카 seems seems seems seems seems seems seems seems seems seems seems seems seems seems와 함께 사용할 수 것 .Stream.collect 부탁드립니다을 사용하다

이 질문은 스트림에 실제로 데이터가 포함되어 있다는 잘못된 가정을 뒷받침합니다.스트림은 데이터 구조가 아니라 다양한 데이터 소스에 걸쳐 벌크 작업을 지정하기 위한 수단입니다.

의 스트림을 . 예를 , 스트림을 하나로 결합하는 조합자가 있습니다.Stream.concatStream.ofCollections」)에서 취득합니다Collection.stream따라서 새로운 요소를 설명하는 새로운 스트림과 함께 수중에 있는 스트림의 결합인 새로운 스트림을 생성할 경우 이러한 스트림을 조합할 수 있습니다.

에서 문제는 PECS가 세 번 입니다.? super T 않다고 가정하고 있습니다.와일드카드가 발생할 때마다 원하는 것이 아닌 고유한 캡처에 대응합니다.이 아닌이 많이 들고 되지 않을 이 있는(또한 컬렉션을 구체화하지 마십시오.이것은 비용이 많이 들고 스트림이 유한하지 않으면 중단되지 않을 수 있습니다. concat을 합니다.정답은 제네릭스를 잘못 이해한 것뿐입니다.

public<T> Stream<T> appendToStream(Stream<? extends T> stream, T element) {
    return Stream.concat(stream, Stream.of(element));
}

스트림에 "삽입"할 생각을 하고 있었기 때문에 PECS와 혼동하고 있었습니다.

어때.

return Stream.concat(stream, Stream.of(elem));

이는 원래 스트림이 유한하다고 가정하는 것입니다.그렇지 않으면 반대 순서로 합칠 수 있습니다.

StreamEx 라이브러리에는 다음 항목이 있습니다.#prepend() ★★★★★★★★★★★★★★★★★」#append() 하다

StreamEx.of("second").prepend("first").append("third").forEach(System.out::println);

출력은 다음과 같습니다.

first
second
third

가장 좋은 방법은 다음과 같이 플랫맵을 사용하는 것입니다.

public <T> Stream<T> appendToStream(Stream<T> stream, T element) {
    return stream.flatMap(e -> Stream.of(e, element));
}

이것은 원래 스트림에서 동작하기 때문에 스트림에서의 다른 중간 동작일 수 있습니다.다음은 예를 제시하겠습니다.

    stream.flatMap(e -> Stream.of(e, element))
            .map(...)
            .filter(...)
            .collect(Collectors.toList());

언급URL : https://stackoverflow.com/questions/28785833/adding-new-value-to-existing-stream

반응형