问题标签 [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.
java - Java 8 mapToInt 和 toIntFunction 示例
我正在测试来自 Java AKA 的新主要更新Java 8
非常有趣。我正在使用流,特别是我正在使用这个简单的代码。
在这个例子中我理解得很清楚,但后来我看到也可以通过这种方式完成它。
我已经检查了toIntFunction方法 ,实际上具有以下签名。
我可以看到 applyAsInt 有一个输入并返回一个 int 只要我理解
这段代码
来电
我的问题是.. 该方法getAge
没有参数并返回一个int但toIntFunction接收一个参数这是我不明白的部分。
参数 fromtoIntFunction
是推断的或其他的
任何帮助都非常感谢..
多谢
java - 是否可以在 Java 8 中转换流?
是否可以在 Java 8 中转换流?假设我有一个对象列表,我可以执行以下操作来过滤掉所有其他对象:
不过,在此之后,如果我想对客户做点什么,我需要对他们每个人进行强制转换:
这看起来有点难看。是否可以将整个流转换为不同的类型?像投到Stream<Object>
一个Stream<Client>
?
请忽略这样一个事实,这样做可能意味着糟糕的设计。我们在我的计算机科学课上做这样的事情,所以我正在研究 java 8 的新特性,并且很好奇这是否可能。
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))
。
java - 从集合中获取并行流
使用 Java 8 是否需要执行以下代码才能确定从 a 获取并行流Collection
?
从Collection
API:
默认流并行流()
返回以该集合为源的可能并行 Stream。此方法允许返回顺序流。
从BaseStream
API:
S 并行()
返回一个等效的并行流。可能会返回自身,因为流已经是并行的,或者因为基础流状态被修改为并行。
我需要调用一个据称将流并行化两次的函数,这不是很尴尬吗?
java - Java 8 Streams - 收集与减少
你什么时候使用collect()
vs reduce()
?有没有人有好的、具体的例子说明什么时候选择一种方式肯定更好?
Javadoc 提到 collect() 是一个可变的归约。
鉴于这是一个可变的减少,我认为它需要同步(内部),这反过来又可能不利于性能。大概reduce()
是更容易并行化,代价是必须在 reduce 的每一步之后创建一个新的数据结构以返回。
然而,上述陈述是猜测,我希望专家在这里加入。
java - 是否可以将有序收集器与并行流一起使用?
在使用流计算笛卡尔积时,我可以并行生成它们,并按顺序使用它们,以下代码演示了这一点:
这将按顺序完美打印所有内容,现在考虑以下代码,我想将其添加到列表中,同时保留顺序。
现在它没有按顺序打印!
这是可以理解的,因为我在任何地方都没有要求保留订单。
现在的问题是:有没有一种方法可以collect()
保持Collector
秩序?
java - 从java中的二维数组流式传输
我正在尝试IntStream
从 n 维int
数组中取出一个。有没有很好的 API 方法来做到这一点?我知道两个流的连接方法。
java - Collectors.groupingBy 不接受空键
在 Java 8 中,这有效:
但这不会:
Maps 允许使用 null 键,并且 List.class.getSuperclass() 返回 null。但是 Collectors.groupingBy 在 Collectors.java 第 907 行发出 NPE:
如果我创建自己的收集器,它将起作用,并将此行更改为:
我的问题是:
1) Collectors.groupingBy 的 Javadoc 并没有说它不应该映射一个空键。出于某种原因,这种行为是必要的吗?
2)是否有另一种更简单的方法来接受空键,而不必创建我自己的收集器?
java - 使用 Streams 将 BigDecimals 相加
我有一个 BigDecimals 集合(在本例中为 a LinkedList
),我想将它们加在一起。是否可以为此使用流?
我注意到这个Stream
类有几种方法
每个都有一个方便的sum()
方法。但是,正如我们所知,float
算术double
几乎总是一个坏主意。
那么,有没有一种方便的方法来总结 BigDecimals?
这是我到目前为止的代码。
如您所见,我正在总结 BigDecimals 使用BigDecimal::doubleValue()
,但这(如预期的那样)并不精确。
后人的答案编辑:
这两个答案都非常有帮助。我想补充一点:我的真实场景不涉及 rawBigDecimal
的集合,它们被包装在发票中。map()
但是,我可以通过使用流函数来修改 Aman Agnihotri 的答案来解决这个问题: