我有一个java。util。流动包含键值对的流,如:
<1,3> <1,5> <3,1> <4,2> <4,7> <4,8>
现在,我想合并所有具有相同密钥的条目:
<1,[3,5]> <3,[1]> <4,[2,7,8]>
数据已经排序,因此只需合并连续的数据集。
现在,我正在寻找一种方法来转换上述流的内容,而不将所有数据集加载到内存中。
我更喜欢得到一个java.util.stream.Stream,结果是一个不同的对象类型包含一个值列表,而不是一个单独的值。
我唯一的方法是一个自定义迭代器,它执行合并,但是转换为迭代器并返回到流似乎非常难看。
最好的方法是什么?
这是SteamEx的解决方案。
int[][] datasets = { { 1, 3 }, { 1, 5 }, { 3, 1 }, { 4, 2 }, { 4, 7 }, { 4, 8 } };
StreamEx.of(datasets) //
.collapse((a, b) -> a[0] == b[0], groupingBy(a -> a[0], mapping(a -> a[1], toList()))) //
.forEach(System.out::println);
您可以用数据集
对象替换int[]
。我们可以添加peek
来验证它是否是延迟加载/计算:
StreamEx.of(datasets) //
.peek(System.out::println) //
.collapse((a, b) -> a[0] == b[0], groupingBy(a -> a[0], mapping(a -> a[1], toList()))) //
.limit(1) //
.forEach(System.out::println);
我有一个方法,它迭代一个映射,对值执行一个操作,并填充一个要返回的映射。 我的问题是,我如何将其转换为Java8(执行不循环的操作)? 代码:
问题内容: 如何在Java 8中使用泛型参数重载Function? 错误:java:名称冲突:sum(java.util.function.Function )和sum(java.util.function.Function )具有相同的擦除 问题答案: 您所提出的示例与Java 8无关,与Java中泛型的工作原理无关。并将在编译时进行类型擦除,并将其转换为。方法重载的经验法则是具有不同的数量,类
问题内容: 我目前正在开发一个涉及在Rails服务器上同步联系人的应用程序。我正在使用Redis服务器和sidekiq在后台执行联系人同步。我的数据库是mongodb,我正在使用Mongoid gem作为ORM。工作流程如下: 电话上的联系人通过应用程序传递到Rails服务器,然后在Rails服务器上,它在Redis服务器中排队。 现在,cron作业会触发连接到Redis的sidekiq并完成作业
我的问题基本上归结为将列表减少为链表,但从reduce函数推断出的类型似乎不正确。 我的列表如下所示 我希望reduce函数在每个reduce步骤中都能做到这一点 然而,减少函数似乎认为这不起作用,因为我猜它不认为身份是节点。 这是我的密码。 我做错了什么? 在接受答案后编辑,我的代码如下所示: 现在打印出来了 我仍然不知道为什么Java不能告诉减少函数的第三个参数是不必要的,它永远不会被调用,但
我偶然发现了一个相当烦人的问题:我有一个程序,它有很多数据源,可以流式传输相同类型的元素,而我想要“映射”程序中每个可用的元素(元素顺序不重要)。 由于元素顺序对我来说并不重要,所以我尝试使用:来并行化reduce操作,但这会触发 要亲自体验它,只需通过注释/取消注释来使用以下main(java 1.8U20)即可 有人能解释一下这种限制吗? <罢工> /找到一种更好的处理流的并行缩减的方法 在@
我试图使用Java8 groupby和reduce特性来根据分组对元素求和,但代码似乎不适合我。 我的要求是,对于每一个DTO对象,我希望这个公里数根据卡车车组进行汇总。因此,突出显示的列应该是同一个TruckId(**Contract flotte)的值的总和 这是我的DTO: "'公共类CostsTruckWsDTO实现可序列化{ 以下是逻辑:''costsTruckWsDTO。setGrou