问题标签 [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 Stream 函数将字谜列表分组为列表映射
Java 8 即将发布...在学习 Streams 时,我遇到了一个关于使用一种新方法对字谜进行分组的场景。我面临的问题是我找不到使用 map/reduce 函数对字符串对象进行分组的方法。相反,我必须创建与Aggregate Operations - Reduction中记录的类似方式。
根据文档,我们可以简单地使用:
所以这Collectors.groupingBy()
将根据使用的方法聚合地图的键。然而,这种方法对于包装一个简单的字符串表示来说似乎太麻烦了。
这将打印以下内容:
相反,我正在寻找一种更简单、更直接的解决方案,它使用新的 map/reduce 函数将结果累积到类似的界面Map<String, List<String>
中。基于How to convert List to Map,我有以下内容:
但是这段代码会产生一个键冲突,因为它是一个 1-1 的映射。
这是有道理的......有没有办法将它们分组到与第一个解决方案类似的输出中groupingBy
,但不使用包装值的POJO?
java - java.util.stream.Streamable 发生了什么?
像这样的早期jdk8-ea
javadocs表明存在一个接口,它与 a 的关系似乎与与 a 的关系相同。java.util.stream.Streamable
Stream
Iterable
Iterator
现在似乎我们被困住了Supplier<Stream>
,这肯定不一样。
怎么了Streamable
?
java - IntStream.range(0, 1_000_000) 停在 113383 (Project Euler: Longest Collatz Sequence)
我的代码中有一个奇怪的问题来回答这个问题:
为正整数集定义了以下迭代序列:
n → n/2(n 为偶数)
n → 3n + 1(n 为奇数)使用上述规则并从 13 开始,我们生成以下序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个术语。尽管尚未证明(科拉茨问题),但人们认为所有起始数字都以 1 结束。
哪个起始数字(低于 100 万)产生最长的链?
注意:一旦链启动,条款允许超过一百万。
调用代码大致如下:
换句话说,问题在于程序永远不会终止,我所看到的是它打印了从 1 到 113383 的所有整数,大概是从第一次.peek(System.out::println)
调用开始的。
还有一个额外的问题是,目前我IntStream
将我的盒子装进一个Stream<Integer>
能够做的事情.collect(Collectors.toMap(i -> i, i -> (int)Iterators.intStream(new CollatzGenerator(i)).count()))
......
我想摆脱拳击并使用该IntStream::collect
方法,但是我不明白该怎么做。
java - 在原始流上使用收集器
Java 8 中是否有任何方法可以在原始流上使用Stream::collect(Collector) ?
通常Stream<Integer>
作为示例有两种收集方法:
<R,A> R collect(Collector<? super T,A,R> collector)
<R> R collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)
但是IntStream
只有一种收集方法:
现在作为示例代码,我有以下内容:
如您所见,我首先将原语装箱以便能够使用Collectors.
方法。
有什么方法可以使用原语并且仍然具有相同的代码Collectors.toMap
吗?
java - 流中间操作排序
是否可以保证,在使用流时,中间操作将按程序顺序执行?我怀疑是这样,否则会导致非常微妙的错误,但我找不到明确的答案。
例子:
这是保证总是返回["a", "c"]
还是["c", "a"]
?(如果最后一个 map 操作在第一个 map 操作之前执行,那可能会引发异常 - 同样,如果在第二个 map 操作之后执行过滤器,“b”将保留在最终列表中)
java - 为什么 Java 8 Stream 类 AutoCloseable?
在 Java 8 中,Stream 类实现了 AutoCloseable。这意味着应该明确关闭流实例。
我理解为什么文件处理程序和数据库连接是可关闭的。但为什么是流?
java - 映射流到地图那是在计数吗?
我有一个Stream<T>
,是否可以Map<T, Long>
为每个元素生成一个将计数增加一个的?我还想在将其存储在示例输入/输出之前是否可以反转T, Long
to :Long, T
Map
的示例内容Stream<String>
:
第一个问题的想要输出:
最后想要的输出:
到目前为止,我所拥有的Stream<VertexData>
:
这目前将 aStream<Primitive>
变成Stream<VertexData>
具有不同元素的 a ,然后变成 a计算Map<VertexData, Long>
出现次数,这不是我想要的,因为我希望它继续计数通过的每个元素。
有没有办法按我的要求做?
java - 并行流、收集器和线程安全
请参阅下面的简单示例,该示例计算列表中每个单词的出现次数:
最后,wordsCount
是{a=2, b=1, c=1}
。
但是我的流非常大,我想并行化这项工作,所以我写:
但是我注意到这wordsCount
很简单HashMap
,所以我想知道是否需要明确要求并发映射以确保线程安全:
非并发收集器可以安全地与并行流一起使用,还是应该在从并行流收集时只使用并发版本?
java - Java 8 Streams FlatMap 方法示例
我一直在检查即将到来的Java update
,即:Java 8 or JDK 8
。是的,我很不耐烦,有很多新东西,但是,有一些我不明白的东西,一些简单的代码:
javadocs是
public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
返回一个流,其中包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果。每个映射流在其内容被放入该流后关闭。(如果映射流为空,则使用空流。)这是一个中间操作。
如果有人创建了一些简单的真实示例flatMap
,我将不胜感激,您如何在以前的 Java 版本中对其进行编码,Java[6,7]
以及如何使用Java 8
.
java - Java8 流和类型转换
谁能向我解释为什么以下代码不起作用?
我试图了解 Java8 的新特性并解决了 BerlinClock Kata。在此期间,我必须解析格式的字符串"hh:mm:ss"
- 我想使用流并编写了以下代码。
但是运行时系统(我认为)抱怨(Integer[])
无法完成显式类型转换。
据我了解,该Arrays.stream(time.split(":"))
部分返回 a Stream<String>
,然后map(s->Integer.parseInt(s))
将其转换为Stream<Integer>
,然后toArray()
生成一个Object[]
. 现在Integer[]
应该可以进行类型转换,因为中间流具有Integer
类型参数。
请注意,我知道如何在不使用类型转换的情况下解决此问题
并将类型签名相应地更改为int[] parseTime
. 但我不明白为什么类型转换有问题。