问题标签 [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 投票
2 回答
11408 浏览

java - Java 8 mapToInt 和 toIntFunction 示例

我正在测试来自 Java AKA 的新主要更新Java 8非常有趣。我正在使用流,特别是我正在使用这个简单的代码。

在这个例子中我理解得很清楚,但后来我看到也可以通过这种方式完成它。

我已经检查了toIntFunction方法 ,实际上具有以下签名。

我可以看到 applyAsInt 有一个输入并返回一个 int 只要我理解

这段代码

来电

我的问题是.. 该方法getAge没有参数并返回一个inttoIntFunction接收一个参数这是我不明白的部分。

参数 fromtoIntFunction是推断的或其他的

任何帮助都非常感谢..

多谢

0 投票
5 回答
129597 浏览

java - 是否可以在 Java 8 中转换流?

是否可以在 Java 8 中转换流?假设我有一个对象列表,我可以执行以下操作来过滤掉所有其他对象:

不过,在此之后,如果我想对客户做点什么,我需要对他们每个人进行强制转换:

这看起来有点难看。是否可以将整个流转换为不同的类型?像投到Stream<Object>一个Stream<Client>

请忽略这样一个事实,这样做可能意味着糟糕的设计。我们在我的计算机科学课上做这样的事情,所以我正在研究 java 8 的新特性,并且很好奇这是否可能。

0 投票
1 回答
2588 浏览

java - 将整数流加入字符串,类型转换问题

{1, 2, 3}我正在尝试使用流(例如-> )将整数数组加入到字符串中"1, 2, 3",但我不断收到编译错误。int/String 类型转换似乎有问题。

数组是int[] IntArray = {1, 2, 3, 4}

给出编译错误:

.map(Object::toString)用or替换地图线.map(n -> Integer.toString(n))也不起作用:

对于.map(Object::toString),以及对于 的第一个错误.map(n -> Integer.toString(n))

0 投票
5 回答
151686 浏览

java - Java 8 流的 .min() 和 .max():为什么会编译?

注意:这个问题源于一个死链接,这是一个以前的 SO 问题,但这里有......

请参阅此代码(注意:我确实知道此代码不会“工作”并且Integer::compare应该使用-我只是从链接的问题中提取它):

根据 and 的 javadoc,.min()两者.max()的参数都应该是 a Comparator。然而这里的方法引用是Integer类的静态方法。

那么,为什么要编译呢?

0 投票
1 回答
1401 浏览

java - 从集合中获取并行流

使用 Java 8 是否需要执行以下代码才能确定从 a 获取并行流Collection

CollectionAPI:

默认流并行流()

返回以该集合为源的可能并行 Stream。此方法允许返回顺序流。

BaseStreamAPI:

S 并行()

返回一个等效的并行流。可能会返回自身,因为流已经是并行的,或者因为基础流状态被修改为并行。

我需要调用一个据称将流并行化两次的函数,这不是很尴尬吗?

0 投票
8 回答
97651 浏览

java - Java 8 Streams - 收集与减少

你什么时候使用collect()vs reduce()?有没有人有好的、具体的例子说明什么时候选择一种方式肯定更好?

Javadoc 提到 collect() 是一个可变的归约

鉴于这是一个可变的减少,我认为它需要同步(内部),这反过来又可能不利于性能。大概reduce()是更容易并行化,代价是必须在 reduce 的每一步之后创建一个新的数据结构以返回。

然而,上述陈述是猜测,我希望专家在这里加入。

0 投票
1 回答
427 浏览

java - 是否可以将有序收集器与并行流一起使用?

在使用流计算笛卡尔积时,我可以并行生成它们,并按顺序使用它们,以下代码演示了这一点:

这将按顺序完美打印所有内容,现在考虑以下代码,我想将其添加到列表中,同时保留顺序。

现在它没有按顺序打印!
这是可以理解的,因为我在任何地方都没有要求保留订单。

现在的问题是:有没有一种方法可以collect()保持Collector秩序?

0 投票
4 回答
36906 浏览

java - 从java中的二维数组流式传输

我正在尝试IntStream从 n 维int数组中取出一个。有没有很好的 API 方法来做到这一点?我知道两个流的连接方法。

0 投票
7 回答
44330 浏览

java - Collectors.groupingBy 不接受空键

在 Java 8 中,这有效:

但这不会:

Maps 允许使用 null 键,并且 List.class.getSuperclass() 返回 null。但是 Collectors.groupingBy 在 Collectors.java 第 907 行发出 NPE:

如果我创建自己的收集器,它将起作用,并将此行更改为:

我的问题是:

1) Collectors.groupingBy 的 Javadoc 并没有说它不应该映射一个空键。出于某种原因,这种行为是必要的吗?

2)是否有另一种更简单的方法来接受空键,而不必创建我自己的收集器?

0 投票
5 回答
167242 浏览

java - 使用 Streams 将 BigDecimals 相加

我有一个 BigDecimals 集合(在本例中为 a LinkedList),我想将它们加在一起。是否可以为此使用流?

我注意到这个Stream类有几种方法

每个都有一个方便的sum()方法。但是,正如我们所知,float算术double几乎总是一个坏主意。

那么,有没有一种方便的方法来总结 BigDecimals?

这是我到目前为止的代码。

如您所见,我正在总结 BigDecimals 使用BigDecimal::doubleValue(),但这(如预期的那样)并不精确。

后人的答案编辑:

这两个答案都非常有帮助。我想补充一点:我的真实场景不涉及 rawBigDecimal的集合,它们被包装在发票中。map()但是,我可以通过使用流函数来修改 Aman Agnihotri 的答案来解决这个问题: