我使用了一个函数,它接受IntStream中的任何一个,尽管我也替换了来自用户整数的数组,尽管在一些地方遇到了编译器错误,试图进行Java归并、排序和分割。
//intStream1 = intStream1.sorted();
//intStream2 = intStream2.sorted();
// IntStream mergedSt = Stream.of(intStream1, intStream2)
.flatMap(Stream::of);
// List<Integer> mergeArr1 =
// intStream1.boxed().collect(Collectors.toList()).subList(0,len1);
static void mergeArraysWithStreams(IntStream intStream1, IntStream intStream2)
{
long len1 = intStream1.count();
long len2 = intStream2.count();
intStream1 = intStream1.sorted();
intStream2 = intStream2.sorted();
int[] mergedStreamArray = IntStream.concat(intStream1,
intStream2).toArray();
for(int i = 0;i<(int)len1;i++)
System.out.println(mergedStreamArray[i]);
for(int j = (int)len1;j<(int)len2;j++)
System.out.println(mergedStreamArray[j]);
}
public static void main(String[] args) {
try {
BufferedReader buffer = new BufferedReader(new In
putStreamReader(System.in));
int[] array = new int[100];
int[] array2 = new int[100];
String[] input;
String[] input2;
int n = Integer.parseInt(buffer.readLine());
while(n>0) {
input = buffer.readLine().split(" ");
input2 = buffer.readLine().split(" ");
n--;
for(int i = 0;i<n;i++){
array[i]=Integer.parseInt(input[i]);
array2[i] = Integer.parseInt(input2[i]);
}
IntStream arr = Arrays.stream(array);
IntStream arr1 = Arrays.stream(array2);
mergeArraysWithStreams(arr, arr1);
}
} catch(IOException ex) {
System.out.println(ex);
}
}
我找不到范围的符号。我已经尝试使用流连接两个数组进行合并
mergedArray.boxed().collect(Collectors.toList()).subList(len1+1, mergedArray.length);
我仍然会得到这个函数的错误,因为我已经开始了这个错误
1
3 4 1
3 9 7
Exception in thread "main" java.lang.IllegalStateException: stream has
already been operated upon or closed
at java.util.stream.AbstractPipeline.<init>(Unknown Source)
at java.util.stream.IntPipeline.<init>(Unknown Source)
at java.util.stream.IntPipeline$StatefulOp.<init>(Unknown Source)
at java.util.stream.SortedOps$OfInt.<init>(Unknown Source)
at java.util.stream.SortedOps.makeInt(Unknown Source)
at java.util.stream.IntPipeline.sorted(Unknown Source)
at MergeArray.mergeArraysWithStreams(MergeArray.java:18)
at MergeArray.main(MergeArray.java:47)
但是它没有看到盒子。我有java.util的导入;. lang;所以我没有我错过了一些东西。尝试对两个数组排序,并通过两个合并数组的顺序返回两个长度相同的数组。我试图得到的解决方案是一行IntStream.range(0,len1). flatmap (). collection . tolist()(类似于我所要求的,但它将产生两个列表从两个流在一个声明中,我认为这是可能的)。
问题来源:stackoverflow
流是延迟求值的,这意味着一旦流到达终端表达式,就对元素进行操作。当它这样做时,流被消耗,不能再被使用。这里你使用一个终端操作收集,然后你试图重用流:
mergedArray.boxed().collect(Collectors.toList()).subList(len1+1, mergedArray.length);
正如@GBlodgett所注意到的,您在这个流实例上使用的另一个操作是count()(它是终端)和sort()。 我不确定Stream是否是你的算法的正确工具-你正在创建一个流的数组,然后一个列表的流。
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。