问题标签 [collectors]

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 回答
2627 浏览

list - Java 8 - 累积并创建新集合

使用 java 8 我想从列表中创建一个新集合并在此过程中累积一个总和。

源列表由如下所示的对象组成:

使用这样的示例列表:

结果列表应如下所示

  • desc1, 10.0, 10.0
  • 描述2、14.0、24.0
  • 描述3、5.0、29.0

我知道如何求和以获得最终总和,在本例中为 29.0,但我想创建结果列表并同时累积总和。

我怎么能用Java8做到这一点?

0 投票
13 回答
35705 浏览

java - 将列表拆分为沿元素的子列表

我有这个列表(List<String>):

我想要这样的东西:

换句话说,我想使用null值作为分隔符将我的列表拆分为子列表,以获得列表列表(List<List<String>>)。我正在寻找 Java 8 解决方案。我试过了,Collectors.partitioningBy但我不确定这是我要找的。谢谢!

0 投票
1 回答
1384 浏览

arrays - 数组中的 Java 8 频率对象

我有一个Object[] array

我需要创建 map Map<Obejct, Integer>,其中Integervalue 包含数组中键 Object 的频率。

我如何以 java 8 风格做到这一点,使用Collectors

0 投票
7 回答
205033 浏览

java - Hashmap with Streams in Java 8 Streams 收集 Map 的值

让我们考虑一个哈希图

我在两个哈希图中都插入了一些值。

例如,

Q1)现在我想对 hashmap 中的键应用过滤条件并检索相应的值(列表)。

例如:这里我的查询是key=1,输出应该是'list1'

我写

但我不知道如何将列表检索为此流操作的输出。

Q2)我想再次对 hashmap 中的键应用过滤条件并检索相应的列表列表。

例如:这里我的查询是key=1%(即key可以是1,10,15),输出应该是'list1','list2','list3'(列表列表)。

0 投票
1 回答
1513 浏览

lambda - 如何在收集器中实现我自己的整理器?

欢迎人们!

我想知道如何实现我自己的完成器,这不是琐碎的,比如身份函数。我的收藏家的标题是

里面有一个finisher方法应该转换List<Pair<T, Double>>List<T>

这可以完成工作

0 投票
1 回答
304 浏览

java - 溪流到地图

我有Stream<String>一个文件,现在我想将相等的单词组合成一个Map<String, Integer>重要的,这个单词在Stream<String>.

我知道我必须使用collect(Collectors.groupingBy(..)),但我不知道如何使用它。

如果有人可以提供一些提示如何解决这个问题,那就太好了!

0 投票
2 回答
2939 浏览

maven - 使用 Streams 和 Maven 时的编译错误

尝试使用Maven编译我的代码时遇到一个奇怪的编译错误,我的代码在 Eclipse 中工作,我正在使用Java 8Files.lines读取文件。

代码如下:

我在哪里使用collect()方法。

谁能帮我解决这个错误?

0 投票
1 回答
49879 浏览

java - Collectors.toSet() 和 HashSet

采用以下示例代码行:

我想要一个HashSet. 对代码使用调试器,我确实得到了一个HashSet. 我查看java.util.stream.Collectors.toSet()了以下代码:

合同保证a Set,执行决定a HashSet;似乎有道理。但是,我的实现需要由 a 保证的恒定时间查找HashSet,而不仅仅是任何旧的Set. 如果实现toSet()决定使用 say a FooSet,这完全在其权利范围内,那么我的实现就会受到影响。

这个问题的最佳实践解决方案是什么?

0 投票
3 回答
3044 浏览

java - 收集器分组通过 java 8

考虑这两个类

学科类:

观察者类:

并考虑这个观察者名单

到目前为止,我尝试并成功做到的是按主题对观察者进行分组,如下所示

但是我如何使用上述相同的逻辑(Collectors, groupingBy, method reference,...)按主题类别对观察者进行分组?

例如,我怎样才能让订阅者订阅一个类别等于sport使用类似这样的主题的观察者

谢谢。

0 投票
2 回答
3210 浏览

java - 并行转动流时如何使用收集器

我实际上试图回答这个问题如何跳过从 Files.lines 获得的 Stream<String> 的偶数行。所以我虽然这个收集器不能很好地并行工作:

但它有效。

编辑:它实际上并没有工作;我被我的输入集太小而无法触发任何并行性这一事实愚弄了。见评论中的讨论

我认为这行不通,因为我想到了以下两个处决计划。


1.counter数组在所有线程之间共享。

线程 t1 读取 Stream 的第一个元素,所以满足 if 条件。它将第一个元素添加到其列表中。然后在他有时间更新数组值之前执行停止。

线程 t2,表示从流的第 4 个元素开始,将其添加到其列表中。所以我们最终得到了一个不需要的元素。

当然,既然这个收集器似乎可以工作,我想它不会那样工作。无论如何,更新都不是原子的。


2.每个Thread都有自己的数组副本

在这种情况下,更新没有更多问题,但没有什么能阻止我线程 t2 不会从流的第 4 个元素开始。所以他也不会那样工作。


所以看起来它根本不像那样工作,这让我想到了一个问题……收集器是如何并行使用的?

有人可以基本上解释一下它是如何工作的,以及为什么我的收集器在并行运行时会工作吗?

非常感谢!