【问题标题】:Is it possible to add add elements to an array using IntStream?是否可以使用 IntStream 向数组添加元素?
【发布时间】:2019-10-03 14:55:56
【问题描述】:

我在 cpp 中使用了这个宏

forn(i,3) cin>>arr[n]; //assume arr initialised earlier

所以我尝试使用 lambda 和 IntStream 在 Java 中实现这一目标

  Scanner sc = new Scanner(System.in);
  IntStream.range(0, 5).map(i->arr[i]).forEach(e->e=sc.nextInt());

但我知道流不会操纵底层数据结构。所以我可以使用流来实现这一点,还是我必须创建自己的功能接口来做到这一点?谢谢

【问题讨论】:

  • 流并不是要取代所有其他类型的迭代,这里的 for 循环将同样易于使用。看起来你想要for (int i=0; i<5; i++) { arr[i]=sc.nextInt(); }
  • 流用于对数据集合(流)应用一组操作,它们不一定是 for 循环等流结构的替代品。
  • 旁白:forn(i,3) 是如何翻译成IntStream.range(0, 5) 的? (如果我没记错的话,界限肯定是不同的。)
  • 实际上我尝试了一种不同于传统 for 循环的方式。考虑上面给出的宏。

标签: java lambda java-8 java-stream


【解决方案1】:

只需将代码更改为

Scanner sc = new Scanner(System.in);
IntStream.range(0, 5).forEach(i -> arr[i] = sc.nextInt());

但还要注意,这不是 Streams 的一个很好的用例。一个简单的循环可能更合适。

【讨论】:

    【解决方案2】:

    当您映射作为输入提供的整数时,您似乎正在寻找 toArrayIntStream 的用法:

    int arr[] = IntStream.range(0, 5).map(i -> sc.nextInt()).toArray()
    

    【讨论】:

    • 你的方法很好,但实际上我正在考虑向底层数组添加值而不是创建一个虚拟数组。
    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2022-09-24
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多