Java 8 从输入构建 IntStream 的最佳方式
Java 8 Best way to build an IntStream from input
我有输入 (STDIN)
0 0 1 2 1
我想以最简单的方式从中创建流。
我确实通过一个一个地读取每个整数并将它们存储到 ArrayList 中来创建一个流。从那里我只需要使用 .stream().reduce() 来让它工作。
我想要的是一种直接从输入创建流的可能方法
我尝试修改这段代码:
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
IntStream is2 = IntStream.generate(inputStream::read).limit(inputStream.available());
通过使用 DataInputStream 和 readInt() 方法
DataInputStream dis = new DataInputStream(System.in);
IntStream is2 = IntStream.generate(dis::readInt).limit(5);//later : dis.available() instead of 5
但它不起作用我在生成函数上抛出了不兼容的类型 IOException。
我可以吗?或者还有另一种方法可以将输入转换为流
我要应用的reduce函数是
reduce( (x , y) -> x ^ y)
我已经通过
在 ArrayList 上很容易地做到了这一点
list.stream().reduce( (x , y) -> x ^ y);
解决方案
我试过将它与扫描仪一起使用来完成这项工作,但没有成功,现在我设法让它工作了
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);
一开始不明白为什么不行
解决方案
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);
将 @Holger 推荐与 splitAsStream 一起使用而不是 Stream.of
int solution2 = Pattern.compile("\s+").splitAsStream(sc.nextLine())
.mapToInt(Integer::parseInt)
.reduce( (x , y) -> x ^ y).getAsInt();;
System.out.println(solution2);
我有输入 (STDIN)
0 0 1 2 1
我想以最简单的方式从中创建流。
我确实通过一个一个地读取每个整数并将它们存储到 ArrayList 中来创建一个流。从那里我只需要使用 .stream().reduce() 来让它工作。
我想要的是一种直接从输入创建流的可能方法
我尝试修改这段代码:
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
IntStream is2 = IntStream.generate(inputStream::read).limit(inputStream.available());
通过使用 DataInputStream 和 readInt() 方法
DataInputStream dis = new DataInputStream(System.in);
IntStream is2 = IntStream.generate(dis::readInt).limit(5);//later : dis.available() instead of 5
但它不起作用我在生成函数上抛出了不兼容的类型 IOException。
我可以吗?或者还有另一种方法可以将输入转换为流
我要应用的reduce函数是
reduce( (x , y) -> x ^ y)
我已经通过
在 ArrayList 上很容易地做到了这一点list.stream().reduce( (x , y) -> x ^ y);
解决方案
我试过将它与扫描仪一起使用来完成这项工作,但没有成功,现在我设法让它工作了
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);
一开始不明白为什么不行
解决方案
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);
将 @Holger 推荐与 splitAsStream 一起使用而不是 Stream.of
int solution2 = Pattern.compile("\s+").splitAsStream(sc.nextLine())
.mapToInt(Integer::parseInt)
.reduce( (x , y) -> x ^ y).getAsInt();;
System.out.println(solution2);