Rom*_*ard 6 lambda java-8 java-stream
我有输入(STDIN)
0 0 1 2 1
我想以最简单的方式从中创建一个流.
我通过逐个读取每个整数并将它们存储到ArrayList中来创建流.从那里我只需要使用.stream().reduce()来使它工作.
我想要的是一种直接从输入创建流的可能方法
我试图改编这段代码:
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
IntStream is2 = IntStream.generate(inputStream::read).limit(inputStream.available());
Run Code Online (Sandbox Code Playgroud)
通过使用DataInputStream和readInt()方法
DataInputStream dis = new DataInputStream(System.in);
IntStream is2 = IntStream.generate(dis::readInt).limit(5);//later : dis.available() instead of 5
Run Code Online (Sandbox Code Playgroud)
但它不起作用我在生成函数上抛出不兼容的抛出类型IOException.
我可以做吗 ?或者是否有另一种方法将输入转换为流
我要应用的reduce函数是
reduce( (x , y) -> x ^ y)
Run Code Online (Sandbox Code Playgroud)
我已经通过这样做很容易地在ArrayList上完成了这个
list.stream().reduce( (x , y) -> x ^ y);
Run Code Online (Sandbox Code Playgroud)
解
我已经尝试使用扫描仪来完成这项工作,但没有成功,现在我设法让它工作
Scanner sc = new Scanner(System.in);
int oi = Stream.of(sc.nextLine().split(" "))
.mapToInt(Integer::parseInt)
.reduce( (x , y) -> x ^ y).getAsInt();
System.out.println(oi);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它一开始不起作用
解决方案
Scanner sc = new Scanner(System.in);
int oi = Stream.of(sc.nextLine().split(" "))
.mapToInt(Integer::parseInt)
.reduce( (x , y) -> x ^ y).getAsInt();
System.out.println(oi);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |