问题标签 [java-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
159932 浏览

java - 在 Java 8 中,我如何转换地图到另一个地图使用 lambda?

我刚刚开始研究 Java 8 并尝试了 lambda,我想我会尝试重写我最近写的一个非常简单的东西。我需要将字符串到列的映射转换为另一个字符串到列的映射,其中新映射中的列是第一个映射中列的防御性副本。Column 有一个复制构造函数。到目前为止,我最接近的是:

但我确信必须有更好的方法来做到这一点,我会很感激一些建议。

0 投票
4 回答
13318 浏览

java - Java 8 是否缺少处理可变流的 Stream.concat?

目前我们Stream.concat在 Java 8 中有以下内容:

我很惊讶为什么没有版本采用可变参数Stream<? extends T>

目前我的代码编写如下:

如果此签名的可变参数可用:

然后我可以更清楚地写成:

没有各种嵌套Stream.concat调用。

还是没有提供其他原因?
我想不出这样的原因,因为我们现在无论如何都要完成可变参数调用的工作。

0 投票
8 回答
245630 浏览

java - 如何将 Java8 流的元素添加到现有列表中

Collector 的 Javadoc展示了如何将流的元素收集到一个新的 List 中。是否有一种方法可以将结果添加到现有的 ArrayList 中?

0 投票
4 回答
1373 浏览

java - Java 8 流中没有索引的原因是什么?

我想知道 Java 8 流(Stream<E>),它们有以下方法:

  • forEach(Consumer<? super E> action)
  • forEachOrdered(Consumer<? super E> action)

反对不提供以下签名的论点是什么?

  • forEachOrdered(BiConsumer<Integer, ? super E> action)
    • 然后它将返回流中项目的索引和项目本身。

有了这个重载,就可以在流被排序的情况下实际使用索引。

我真的很想知道反对它的论点是什么。

编辑,实际上同样适用于Iterator<E>with forEachRemaining,可能还有更多类。
如果没有一个类提供这样的选项,那么我怀疑它已被考虑用于 Java 8 并被拒绝。

0 投票
2 回答
1301 浏览

java - BufferedReader.lines().foreach() never terminates

I'm trying to read a HTTP request from a Bufferedreader, that gets Socket.getInputStream() as input. However, when I use Bufferedreader.lines().foreach(), it never terminates and it just gets stuck.

My code (simplified):

0 投票
3 回答
1012 浏览

java - 使用流计算无限和

我正在尝试学习使用 Stream API 的详细信息,我给自己的一项任务是尝试编写一个方法,该方法采用无限DoubleStream并尝试计算总和(假设它收敛)。也就是说,我想写一个方法

我可以用类似的东西打电话

得到总和 (1 + 1/2 2 + 1/3 2 + ... ) = ζ(2) = π 2 /6。

我以旧方式执行此操作的粗略方法:

这给了我一个精确到 5 个位置的结果。

我可以使用以下方式以黑客方式实现该方法iterator()

但这感觉就像回到旧的方式,我一直在寻找一种方法,以更多地使用流的方式,或者其他方式。

这会产生正确的结果:

但我碰巧知道旧方法使用了近 800000 个术语,并且对流进行限制违背了我的目的。问题是我没有看到除使用之外的其他方法来切断流limit(),这意味着我必须事先知道我将拥有多少个术语;我没有看到基于某些条件来停止流的方法,该条件是根据我在流中看到的内容计算得出的。

这不起作用:

跟踪表明当看到最后一个术语时确实发生了一些事情,但没有什么好处:在一种情况下,计算停止但程序仍然挂起,在另一种情况下,它给了我一个可爱的小故障转储,我可以报告给甲骨文。

那么有没有办法完成我正在寻找的那种事情?

(注意:我现在假设串行流。但我认为这是可以从并行性中受益的问题,一旦我弄清楚如何使它工作。)

0 投票
3 回答
15158 浏览

java - 使用流,如何映射 HashMap 中的值?

给定Map<String, Person>where Person 有一个String getName()(等)方法,我怎样才能把它Map<String, Person>变成一个Map<String, String>where theString是从调用中获得的Person::getName()

我会使用 Pre-Java 8

但我想使用流和 lambda 来做到这一点。

我看不到如何以功能样式执行此操作: Map/HashMap don't implement Stream.

people.entrySet()返回一个Set<Entry<String, Person>>我可以流式传输的,但是如何Entry<String, String>向目标地图添加一个新的?

0 投票
2 回答
7081 浏览

java - 是否不鼓励在 Java EE 容器中使用 Java 8 并行流?

鉴于不鼓励在 Java EE 容器中生成线程。在 Java EE 中使用可能产生线程的Java 8 并行流是否也会被劝阻?

0 投票
5 回答
18311 浏览

java - Files.walk(),计算总大小

我正在尝试计算光盘上文件的大小。在 java-7 中,这可以使用Files.walkFileTree来完成,如我在此处的回答中所示。

但是,如果我想使用 java-8 流来执行此操作,它将适用于某些文件夹,但不适用于所有文件夹。

上面的代码适用于路径a:/files/,但c:/它会抛出异常

我了解它的来源以及如何使用 Files.walkFileTree API 来避免它。

但是如何使用Files.walk() API 来避免这个异常呢?

0 投票
2 回答
3441 浏览

java - Java 8 重构 lambda 表达式

我想创建一个使用 lambda 表达式应用常见统计信息的简单类。我想知道如何避免在 statistic() 方法中使用 switch case?

例如,我可能想编写一个新的 lambda 来计算列表的方差等。

谢谢你。

我想到了这样的方法