问题标签 [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 回答
224 浏览

java - Java 8 流 API 收集器问题

我正在通过它的边缘遍历一个图,并希望有一个所有源和目标的列表。这是我到目前为止所拥有的:

有没有办法在同一个映射/收集步骤中同时获取源和目标?类似(伪代码):

或普通的旧 Java 7

干杯,丹尼尔

0 投票
9 回答
213576 浏览

java - Java8:哈希映射到 HashMap使用 Stream / Map-Reduce / Collector

我知道如何ListY-> “转换”一个简单的Java Z,即:

现在我想对地图做基本相同的事情,即:

解决方案不应限于String-> Integer。就像List上面的例子一样,我想调用任何方法(或构造函数)。

0 投票
1 回答
1113 浏览

java-8 - BiConsumer 不能修改参数

我为 java 8 流实现了一个收集器,当达到给定阈值时,它将实体存储到存储库中。

这不能按预期工作。元素 e 被添加到列表中,但在达到阈值后不会重置。Integer 也保持在 0,这是可以预期的,因为它是最终成员。看来我唯一的选择是使我的 Tuple2 可变并清空 List :-( 任何建议如何使用不可变元组解决这个问题?

0 投票
1 回答
2318 浏览

java - 如何在不使用辅助集合的情况下从流中收集仅包含相同 X 类型对象的某些字段的 X 类型对象

一个例子:

这允许提取一个字段

这需要一个辅助集合

有一种方法可以直接提取更多字段,例如使用 .map() 吗?

基本示例:

0 投票
2 回答
2715 浏览

java - Java 8 Streams:构建多级/复合对象

我开始使用 java 8 流 API。我想将“sql 结果集”列表转换为域对象,即复合结构。

域对象:一个用户拥有一个权限集合,每个权限都有一个应用年份的集合。例如,John 有 2 个权限(MODERATOR 和 DEV)。其版主权限仅适用于 2014 年和 2015 年,其开发权限仅适用于 2014 年。

现在我进行查询并得到一个平面结果列表,例如:

1 和 2 是用户 ID。

我尝试了各种构造,但最后它比流利的更复杂。并且没有工作:)
我在一本 Java 8 的书中读到,用收集器构建 dompain 对象是“简单的”。
读到这里我有点哭了:'(

我试过

并得到了一个泛型编译失败的地狱。

  • 使用 java 8 流构造多级复合域对象的最佳方法是什么?
  • collectionAndThen / Finisher 是个好主意吗?
  • 还是您只使用 groupingBy 后跟映射函数?
  • 您是否将分类器转换为对象(某种第一级映射函数?)

因为最后我想摆脱 Map 并得到一个List<User>结果(我想我可以在 entrySet 上添加一个 map 调用来完成转换)。

0 投票
1 回答
1300 浏览

java - 创建一个高效的 ImmutableMap 收集器,为每个键保存一个 ImmutableList

我已经在这个问题上沉思了一个星期,但我不太确定有什么方法可以做到这一点。我遇到的一个常见任务是为给定类型的值构建一个包含 ImmutableLists 的 ImmutableMap,例如ImmutableMap<K,ImmutableList<V>>,我想通过一个收集器来完成它,以便我可以在流上利用它。

我在下面显示的博客上找到了这个很棒的 ImmutableMap 收集器。但是我希望 V 成为一个 ImmutableList,并且我希望传入流映射多个具有相同键的值,该键与具有 ImmutableList 值的所述键配对。我尝试过的每一个实现都不是最理想的,而不是流式的,因为我一直在使用一个普通的 HashMap 保存 ImmutableList.Builder 值,当我完成填充时,我会遍历它并将其转换为 ImmutableList 值调用 build() 并将其放入新地图中。有任何想法吗?

我希望实现有一个标题......

好的,感谢 fge 的帮助,我成功了!请参阅下面的答案。

0 投票
1 回答
29401 浏览

java - 是否有收集器收集到保序集?

Collectors.toSet()不维护秩序。我可以改用 Lists,但我想指出生成的集合不允许元素重复,这正是Set接口的用途。

0 投票
6 回答
2111 浏览

java - How would you make a java.util.stream.Collector that collects to com.google.common.collect.ImmutableSet?

That seems too tricky for me since ImmutableSet instances are only built with ImmutableSet.Builder instances, which don't implement Collection so you can't just use Collectors.toCollection(ImmutableSet::new) or Collectors.toCollection(ImmutableSet.Builder::new).

0 投票
4 回答
24814 浏览

java - Java 8 Streams:为什么 Collectors.toMap 对于带有通配符的泛型表现不同?

假设你有一个List数字。中的值List可以是 typeIntegerDouble。当您声明这样的 aList时,可以使用通配符 ( ?) 或不使用通配符来声明它。

所以,现在我想stream通过使用(显然下面的代码只是说明问题的一个示例)。让我们从流式传输开始:ListcollectMapCollectors.toMapnumberList

但是,我不能在wildcardList

编译器在调用时抱怨number.intValue()以下消息:

Test.java:找不到符号
符号:方法 intValue()
位置:java.lang.Object 类型的变量号

从编译器错误中,很明显numberlambda 中的 被视为 anObject而不是 a Number

所以,现在我的问题:

  • 在收集 的通配符版本时List,为什么它不像非通配符版本的List
  • 为什么numberlambda 中的变量被认为是 aObject而不是 a Number
0 投票
7 回答
8752 浏览

java - 如何使用 Java 8 lambda 按顺序计算多个数字的平均值

如果我有集合 Point ,如何在单次迭代中使用 Java 8 流计算 x,y 的平均值。

以下示例创建两个流并在输入集合上迭代两次以计算 x 和 y 的平均值。他们是使用 java 8 lambda 在单次迭代中计算平均 x,y 的任何方法吗: