将Stream <IntStream>转换为单个IntStream

Lav*_*ari 0 java java-8 java-stream

我想将转换List<String>IntStream。假设我的清单是["abc", "de", "fghi"]。然后IntStream,我要像1,1,1,2,2,3,3,3,3。(一些出现的次数iIntStream取决于长度i个串中的给定的列表)

为此,我编写了以下方法(它将不会编译):

private static IntStream getSingleIntStream(List<String> list) {
    final AtomicInteger atomicInteger = new AtomicInteger();
    return list.stream()
            .map(str -> {
                        atomicInteger.incrementAndGet();
                        return IntStream.range(0, str.length())
                                .map(i -> atomicInteger.get());
                    }); // Now I don't understand how can I convert this Stream<IntStream> to a single IntStream 

}
Run Code Online (Sandbox Code Playgroud)

但是我不明白如何将a转换Stream<IntStream>为单个IntStream。(我的猜测是我们可以flatMap以某种方式使用,但我不完全了解如何使用它。)

我使用IntStream而不是Stream<Integer>避免自动装箱,并使我的整个系统更高效。

Had*_*i J 6

另一个解决方案是这样的:

IntStream result =  IntStream.range(0,list.size())
                             .flatMap(i-> IntStream.range(0, list.get(i)
                                                                 .length())
                                                   .map(j->i+1));
Run Code Online (Sandbox Code Playgroud)