问题标签 [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.
java - Java 8 流 API 收集器问题
我正在通过它的边缘遍历一个图,并希望有一个所有源和目标的列表。这是我到目前为止所拥有的:
有没有办法在同一个映射/收集步骤中同时获取源和目标?类似(伪代码):
或普通的旧 Java 7
干杯,丹尼尔
java - Java8:哈希映射到 HashMap使用 Stream / Map-Reduce / Collector
我知道如何List
从Y
-> “转换”一个简单的Java Z
,即:
现在我想对地图做基本相同的事情,即:
解决方案不应限于String
-> Integer
。就像List
上面的例子一样,我想调用任何方法(或构造函数)。
java-8 - BiConsumer 不能修改参数
我为 java 8 流实现了一个收集器,当达到给定阈值时,它将实体存储到存储库中。
这不能按预期工作。元素 e 被添加到列表中,但在达到阈值后不会重置。Integer 也保持在 0,这是可以预期的,因为它是最终成员。看来我唯一的选择是使我的 Tuple2 可变并清空 List :-( 任何建议如何使用不可变元组解决这个问题?
java - 如何在不使用辅助集合的情况下从流中收集仅包含相同 X 类型对象的某些字段的 X 类型对象
一个例子:
这允许提取一个字段
这需要一个辅助集合
有一种方法可以直接提取更多字段,例如使用 .map() 吗?
基本示例:
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 调用来完成转换)。
java - 创建一个高效的 ImmutableMap 收集器,为每个键保存一个 ImmutableList
我已经在这个问题上沉思了一个星期,但我不太确定有什么方法可以做到这一点。我遇到的一个常见任务是为给定类型的值构建一个包含 ImmutableLists 的 ImmutableMap,例如ImmutableMap<K,ImmutableList<V>>
,我想通过一个收集器来完成它,以便我可以在流上利用它。
我在下面显示的博客上找到了这个很棒的 ImmutableMap 收集器。但是我希望 V 成为一个 ImmutableList,并且我希望传入流映射多个具有相同键的值,该键与具有 ImmutableList 值的所述键配对。我尝试过的每一个实现都不是最理想的,而不是流式的,因为我一直在使用一个普通的 HashMap 保存 ImmutableList.Builder 值,当我完成填充时,我会遍历它并将其转换为 ImmutableList 值调用 build() 并将其放入新地图中。有任何想法吗?
我希望实现有一个标题......
好的,感谢 fge 的帮助,我成功了!请参阅下面的答案。
java - 是否有收集器收集到保序集?
Collectors.toSet()
不维护秩序。我可以改用 Lists,但我想指出生成的集合不允许元素重复,这正是Set
接口的用途。
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)
.
java - Java 8 Streams:为什么 Collectors.toMap 对于带有通配符的泛型表现不同?
假设你有一个List
数字。中的值List
可以是 typeInteger
等Double
。当您声明这样的 aList
时,可以使用通配符 ( ?
) 或不使用通配符来声明它。
所以,现在我想stream
通过使用(显然下面的代码只是说明问题的一个示例)。让我们从流式传输开始:List
collect
Map
Collectors.toMap
numberList
但是,我不能在wildcardList
:
编译器在调用时抱怨number.intValue()
以下消息:
Test.java:找不到符号
符号:方法 intValue()
位置:java.lang.Object 类型的变量号
从编译器错误中,很明显number
lambda 中的 被视为 anObject
而不是 a Number
。
所以,现在我的问题:
- 在收集 的通配符版本时
List
,为什么它不像非通配符版本的List
? - 为什么
number
lambda 中的变量被认为是 aObject
而不是 aNumber
?
java - 如何使用 Java 8 lambda 按顺序计算多个数字的平均值
如果我有集合 Point ,如何在单次迭代中使用 Java 8 流计算 x,y 的平均值。
以下示例创建两个流并在输入集合上迭代两次以计算 x 和 y 的平均值。他们是使用 java 8 lambda 在单次迭代中计算平均 x,y 的任何方法吗: