Lav*_*ari 0 java java-8 java-stream
我想将转换List<String>为IntStream。假设我的清单是["abc", "de", "fghi"]。然后IntStream,我要像1,1,1,2,2,3,3,3,3。(一些出现的次数i在IntStream取决于长度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>避免自动装箱,并使我的整个系统更高效。
另一个解决方案是这样的:
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)