【发布时间】:2015-08-05 08:27:26
【问题描述】:
我正在尝试将两个流连接在一起。我遇到了我的流关闭的问题,我不明白为什么。没有人可以向我解释为什么会发生以下情况。
下面的代码不起作用。我在 flatMap 函数上收到流已关闭的异常。
private Stream<KeyValuePair<T, U>> joinStreams(Stream<T> first, Stream<U> second) {
return
first
.map(x -> second
.map(y -> new KeyValuePair<T, U>(x, y))
)
.flatMap(x -> x);
}
当我首先从第二个流中收集一个列表,然后从该列表中获取一个流时,它确实有效。请参阅下面的示例。
private Stream<KeyValuePair<T, U>> joinStreams(Stream<T> first, Stream<U> second) {
List<U> secondList = second.collect(Collectors.toList());
return
first
.map(x -> secondList.stream()
.map(y -> new KeyValuePair<T, U>(x, y))
)
.flatMap(x -> x);
}
我不明白为什么会这样。谁能解释一下?
编辑:
调用此函数的代码示例。
List<Integer> numbers1 = Arrays.asList(1, 2);
List<Integer> numbers2 = Arrays.asList(3, 4);
List<KeyValuePair<Integer, Integer>> combined = joinStreams(numbers1.stream(), numbers2.stream())
.collect(Collectors.toList());
// Expected result
// 1 3
// 1 4
// 2 3
// 2 4
【问题讨论】:
标签: java java-8 java-stream